توانایی خود را افزایش دهیم

فرهنگ و هنر
توانایی خود را افزایش دهیم

بسم الله الرحمن الرحیم

با سلام

• لطفا مطالب سایت را به صورت منظم پیگیری کنید
• ارائه پیشنهادات و نظرات شما باعث بهبود کیفیت ارائه مطالب خواهد شد

بعضی از مطالب آموزشی سایت توسط اینجانب نوشته نشده و صرفا جهت مطالعه دوستان از منابع دیگری جمع آوری شده است
چنانچه در مطالب موضوعی ملاحظه شد که از نظر علمی ، اعتقادی ، سیاسی ، مذهبی و ... دارای مشکل بود حتما در قسمت نظرات ذکر بفرمایید تا اصلاح گردد.
با تشکر
موفق باشید

طبقه بندی موضوعی
آخرین نظرات
يكشنبه, ۸ تیر ۱۳۹۳، ۰۲:۰۸ ق.ظ

درس هفتم- توابع

مفهومی که در این درس با آن آشنا می شویم تابع نام دارد.

ساده ترین تعریفی که از یک تابع می توان گفت این است: تابع مجموعه ای از چند دستور است که برای انجام کار مشخصی نوشته شده است. به طور مثال مجموعه کدهایی را در نظر بگیرید که برای جمع دو عدد و چاپ نتیجه آن نوشته شده اند.

برای نوشتن یک تابع باید از قوانین ویژه ای پیروی کرد. اگر دلیل بوجود آمدن تابع یا دلیل استفاده کردن از آن مشخص شود، مفهوم تابع بهتر فهمیده خواهد شد. پس در این درس با مفهوم آن آغاز می کنیم.

 

تعریف تابع
تابع تعریفی است برای مجموعه ای از کدهای نوشته شده در کنار هم، به صورت یک قطعه یا بلوک، که با اجرای آن کار مشخصی، در هر زمان که نیاز باشد، انجام می گیرد. هر تابع یک نام مشخص دارد که کدهای نوشته شده تحت آن نام و در داخل بلوک آن تابع قرار می گیرند.

 

دلیل استفاده از تابع
دلیل اصلی ساخت و استفاده از تابع جلوگیری از تکرار در نوشتن کدها در برنامه است. فرض کنید شما برنامه ای می نویسید که در آن یک عمل مانند جمع دو عدد به صورت مداوم اتفاق می افتد.

یک راه انجام این کار این است که در هر زمان که به این عمل جمع نیاز بود، کدهای عمل کننده به این عملیات را بنویسید. این می شود تکرار یک مجموعه ای از کدها که کار این عملیات را برای شما انجام می دهند. راه دوم این کار نوشتن تابع است، یعنی مجموعه ای از کدها که کار جمع کردن دو عدد را در قالب یک تابع با نام مشخص انجام می دهند.

حال در هر زمان که نیاز به این عمل ریاضی باشد، فقط کافی است که تابع را فراخوانی کنید تا با اجرای دستورات در بلوک خود، نتیجه لازم را به شما بدهد. خب با این کار شما فقط یک بار یک تابع تعریف می کنید، اما هزاران بار می توانید از آنها در طول برنامه استفاده کنید.

 

طریقه نوشتن تابع
شیوه نوشتن تابع به صورت زیر است:

function نام تابع  () {
//  دستورات
}

ابتدا کلمه تابع (function) نوشته و بعد از آن نام تابع را می نویسید. دستورات تابع در داخل بلوک آن قرار می گیرند. به تابع زیر توجه کنید:

function add(){
$X = 3 + 2  ;
print   $x  ;  // 5
}

همان طور که می بینید تابعی با نام add() نوشته شده که در آن اعداد ۲ و ۳ با هم جمع و در متغیر $X ریخته می شوند، در آخر تابع هم متغییر $x چاپ می شود. تا اینجا تابعی نوشته شده است اما این تابع تا زمانی که فراخوانی نشود، به تنهایی کاری نمی کند.

 

فراخوانی تابع
همانطور که گفته شد تابع این توانایی را به ما می دهد که از دوباره نویسی کدها جلوگیری کنیم و یک بار با نوشتن، آن را در زمان های مورد نیاز استفاده کنیم. قسمت دوم تعریف تابع به استفاده از تابع در زمان های مورد نیاز به هر تعدادی که خواستیم اشاره می کند، این کار را فراخوانی تابع می گوییم. به مثالی که در بالا زدیم دوباره توجه کنید:

<?php
function add() {
$X = 3 + 2  ;
print   $x  ;  // 5
}
add(); //  فراخوانی تابع   =>   5
?>

فراخوانی تابع با عبارت add()  که همان نام تابع است انجام گرفت و با فراخوانی آن کدهای تابع عمل کرده و نتیجه را چاپ می کند. نکته قابل توجه این است که شما می توانید به هر تعدادی که خواستید از این تابع استفاده کنید و یا به تعبیر دیگر آن را فراخوانی کنید و هیچ محدودیتی در آن نیست.

حال فکر می کنیم که به قدرت تابع پی بردید، یعنی نوشتن یک بار و استفاده کردن به تعداد دلخواه در هر زمان که خواستیم.

 

فرستادن پارامتر به تابع
پارامتر مقداری است که به تابع فرستاده می شود تا تابع در درون بلوک کدهای خود از آن استفاده کند. تابعی که در قسمت قبلی نوشتیم هیچ مقداری را به صورت پارامتر دریافت نمی کرد و فقط با مقادیر تعریف شده در داخل کدها کار می کرد، خروجی این تابع ثابت است و همیشه مقدار 5 را خواهد نوشت.

حال اگر بخواهیم تابع را طوری بنویسیم که مقادیر را به صورت پارامتر از ما بگیرد و بعد عملیات جمع را انجام دهد، ما می توانیم خروجی های متفاوت و با توجه به پارامترهای ارسالی بگیریم. مثلا به تابع زیر دقت کنید:

<?php
function add( $x , $y ) {
$z = $x + $y ;
print   $z  ;  // خروجی با توجه به پارامترهای ارسالی است
}
add(۵ , ۶); //  فراخوانی تابع با ارسال دو مقدار به صورت پارامتر  
?>

در زمان فراخوانی تابع هر مقداری که به صورت پارامتر به تابع ارسال کنیم، حاصل جمع آن دو عدد را خواهیم داشت. این به ما اجازه می دهد که تابعی مستقل از مقادیر و تنها متمرکز به عملیات خاصی داشته باشیم. به طور مثال می توانیم فراخوانی را به شکل های زیر انجام دهیم:

add(۱ , ۲); // ۳
add(۳ , ۹);  // ۱۲
add(۱۱ , ۶۸);  // ۷۹

نکته: در هنگام فراخوانی تابع حتی می توان پارامترها را به صورت متغیر به تابع ارسال کرد:

add(  $a , $b );

در این حالت این دو پارامتر می توانند هر عددی را ارسال کنند. خوبی این کار به این است که پارامترها می توانند نتیجه یک عمل دیگر باشند و یا اعدادی باشند که توسط کاربر در کادرهای فرم نوشته شده باشند.

تارنمایی که در درس های قبلی درست کردیم، یادتان هست؟ بیایید برگه دیگری به آن اضافه کنیم و در آن برگه با تابعی که می نویسیم چند عملیات انجام دهیم.

پوشه جدیدی با نام function بسازید و محتوای پوشه register را در آن قرار دهید. این کار برای این انجام می شود که شما در حین یادگیری مفاهیم، قدم به قدم یک تارنما داشته باشید با نسخه های متفاوت که در هر نسخه به مفهومی اشاره شده باشد.

 

برگه تابع  function.php
در داخل پوشه function فایلی با نام function.php بسازید و کدهای زیر را در داخل آن بنویسید:

<?php
$page_title = 'تابع';
include ('includes/header.html'); ?>
<h1>  تاریخ تولد </h1>
<?php
/*  انگلیسی به فارسی  */
function convert($string) {
    $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
    $num = range(0, 9);
    return str_replace($num, $persian,  $string);
}
function calendar() {
    echo '<select name="year">';
    for ($year = 1300; $year <= 1390; $year++) {
                echo "<option value="$year">" . convert($year) . "</option> "; }

    echo '</select>';
    $months = array (1 => 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');
    echo '<select name="month">';
    foreach ($months as $key => $value) {
                echo "<option value="$key">$value</option> "; }

    echo '</select>';
    echo '<select name="day">';
    for ($day = 1; $day <= 31; $day++) {
    echo "<option value="$day">" . convert($day) . "</option> "; }
    echo '</select>';
} // End of the function definition.
echo '<form action="function.php" method="post">';
// Call the function.
calendar();
echo '</form>';
?>
<?php include ('includes/footer.html'); ?>

اتفاقی که در اینجا می افتد این است که این برگه برای شما یک کادر تاریخ به همراه روز، ماه و سال می سازد. در درس قبلی ما یک فرم ثبت نام نوشتیم. خوب فرم ثبت نام نیاز به تاریخ زادروز هم دارد:

برای پیچیده نشدن امر ما این قسمت را به طور مجزا گذاشتیم اما در آینده در درس های پایانی به ساخت یک فرم کامل ثبت نام خواهیم پرداخت.

توضیح کدها
با قسمت بالای برگه قبلا آشنا شده ایم، پس یک راست سراغ کدهای داخل می رویم. در ابتدای این برگه تابعی نوشته شده که یک پارامتر را دریافت می کند.

(function convert($string کاری که این تابع می کند این است که با گرفتن یک عبارت اعدادی که به زبان انگلیسی نوشته شده اند را به زبان فارسی تبدیل می کند. این تابع از سه قسمت تشکیل شده است:

$persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');

این خط کد، یک متغیر می سازد که به صورت آرایه تعریف می شود و در داخل آن اعداد را از ۰ تا ۹ قرار می دهد.

$num = range(0, 9);

این دقیقا همان کار بالا را برای اعداد انگلیسی انجام می دهد اما با کمک تابع range() یادتان هست؟ در قسمت آرایه ها در مورد این تابع حرف زدیم.

return str_replace($num, $persian,  $string);

در این قسمت از یکی از توابع از پیش تعریف شده پی اچ پی استفاده شده است. تابع     str_replace() سه پارامتر را قبول می کند. اعداد انگلیسی، اعداد فارسی و عبارتی که به تابع convert فرستاده شده و بعد اعداد انگلیسی را در عبارت فرستاده شده با اعداد فارسی عوض می کند. در اصل ما تابعی ساخته ایم که از تابع دیگری که از قبل تعریف شده، درون آن استفاده کرده ایم.

بعد از این تابع به تابع دیگری می رسیم با نام calendar(). این تابع هیچ ورودی به عنوان پارامتر دریافت نمی کند و فقط خروجی برای ما چاپ می کند. برای ساختن یک کادر زادروز نیاز به سه قسمت است: روز، ماه و سال؛ که در این تابع به طور مجزا هر کدام تعریف شده اند.

echo '<select name="year">';
    for ($year = 1300; $year <= 1390; $year++) {
            echo "<option value="$year">" . convert($year) . "</option> ";    }

echo '</select>';

این قسمتی است که با استفاده از حلقه for، بخش سال را برای مان چاپ می کند. این سال ها از ۱۳۰۰ شروع و به ۱۳۹۰ ختم می شود. دقت کنید که این اعداد به زبان انگلیسی هستند پس در زمان چاپ آن از تابع تبدیل کننده convert که قبلا نوشتیم استفاده می کنیم تا کار تبدیل را انجام دهد.

$months = array (1 => 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');
echo '<select name="month">';
    foreach ($months as $key => $value) {
                    echo "<option value="$key">$value</option> ";    }
echo '</select>';

در این قسمت به کمک تابع  array() ماه های ایرانی را در آرایه ای قرار داده و با کمک حلقه آنها را چاپ می کنیم.

echo '<select name="day">';
        for ($day = 1; $day <= 31; $day++) {
                           echo "<option value="$day">" . convert($day) . "</option> "; }
echo '</select>';

این قسمت شبیه سال است که روز را برایمان چاپ می کند.

خب تا به اینجا تابع نوشته شده و آماده استفاده است، پس با یک فراخوانی از آن استفاده می کنیم:

echo '<form action="function.php" method="post">';
calendar();
echo '</form>';

نکته: برای ساخت این زاد روز انگار،  ما از برچسب های اچ تی ام ال با نام select استفاده کردیم که یک کادر با قابلیت نگهداری مقادیر و به صورت کشویی به پایین درست می کند.

 

توابع با پارامتر پیش فرض
کار دیگری که در هنگام ساخت یک تابع می توانید انجام دهید، دادن یک مقدار پیش فرض به یک پارامتر یا متغیر است. با این کار در صورتی که هنگام فراخوانی، مقداری را به پارامتر نفرستید، از مقدار پیش فرض استفاده می کند و اگر مقداری را به عنوان پارامتر بفرستید، از مقدار شما استفاده می کند.

function say_hello( $name , $message = ' درود '){
echo "$message, $name" ; }
say_hello('پیمان'); //     درود ، پیمان
echo '<br />';
say_hello('پیمان' , 'سلام' ); // سلام ، پیمان   

در زمان فراخوانی ابتدایی فقط یک پارامتر فرستاده می شود و پیغام همراه مقدار پیش فرض چاپ می شود. اما در فراخوانی دوم که با دو مقدار تابع را می خواند، در زمان چاپ از این دو مقدار استفاده می کند و مقدار پیش فرض را در نظر نمی گیرد.

 

بازگشت مقدار از تابع
در توابعی که تا به اینجا مثال زدیم، به جز تابع  convert()، همه آنها مقدار خروجی را چاپ می کردند. حال شرایطی مانند تابع convert() را در نظر بگیرید که نیاز داریم تابع، عملیاتی انجام دهد و بعد خروجی را به ما باز گرداند تا در جای دیگری از آن استفاده کنیم. برای این کار از عبارت return استفاده می کنیم. به مثال زیر توجه کنید:

function add ( $x , $y ){
$z = $x + $y ;
return $z ;
}
$num = add( 2 , 3 ) ;
echo $num * 3 ;

اینجا ابتدا مقدارهایی فرستاده شده، بعد در تابع آنها جمع و در درون متغیر دیگری $z ریخته می شوند. در آخر هم تابع مقدار را توسط متغیر باز می گرداند.

بعد از فراخوانی تابع، مقدار بازگردانده شده به داخل متغیر $num ریخته شده و در ادامه از آن استفاده می شود.

نکته ۱: برای اینکه چند مقدار را به عنوان خروجی باز گردانیم، باید از آرایه برای بازگرداندن استفاده کنیم:

return array  ($x , $y );

نکته ۲: در ساخت توابع باید به این نکته توجه کرد که توابع برعکس متغیرها به بزرگی و کوچکی نام تابع اهمیت نمی دهند. مثلا همه این فراخوانی ها یک تابع را صدا می زنند:

add( $x , $y);
ADD( $x , $y);
Add( $x , $y);

خب این هم از توابع؛ در درس های بعدی به سراغ پایگاه داده ها MySQL می رویم تا خود را به این فن هم مجهز کنیم. بعد از یادگیری پایگاه داده ها موضوع از این هم جالب تر خواهد شد.

موافقین ۰ مخالفین ۰ ۹۳/۰۴/۰۸

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی