نحوه تعریف و استفاده از function (تابع) در جاوا اسکریپت

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

نحوه استفاده

در جاوا اسکریپت برای تعریف function به شکل زیر عمل می شود:

function functionName(پارامترها){
	دستورات
}

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

مثال: تابعی برای محاسبه حاصل جمع دو عدد بنویسید.

حالت اول: بدون مقدار برگشتی

function sum(num1, num2){
  var result = num1 + num2;
  alert(result);
}

حالت دوم: همراه با بازگشت مقدار به برنامه

function sum(num1, num2){
  var result = num1 + num2;
  return result;
}

نحوه استفاده از حالت اول: در این روش کافی است تنها نام function را ذکر کرده و پارامترها را به آن ارسال نمایید.

<script>
  function sum(num1, num2) {
    var result = num1 + num2;
    alert(result);
  }
  
  sum(10,15);
</script>

نحوه استفاده از حالت دوم: از آنجا که در روش function مورد نظر مقداری را به برنامه برگشت می دهد، می بایست به نحوی از مقدار برگشتی آن استفاده نمود.

<script>
  function sum(num1, num2) {
    var result = num1 + num2;
    return result;
  }
  var x = sum(10, 15);
  alert(x);
</script>

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

<script>
  function fact(num) {
    var result = 1;
    for(var i=1;i<=num;i++){
      result = result * i;
    }
    return result;
  }
  var x = fact(5);
  alert(x);
</script>

در این مثال متغیر result که در آن نتیجه فاکتوریل قرار می گیرد، دارای مقدار اولیه 1 می باشد، اگر به این متغیر مقدار اولیه ندهیم با خطای NaN مواجه خواهیم شد که به معنی Not a Number می باشد.

Recursive functions

به توابعی که در بدنه function، خود function مجددا فراخوانی یا استفاده می شود، توابع خود فراخوان یا Recursive function گفته می شود. این توابع هنگامی استفاده می شوند که قرار است نتیجه function مورد نظر، با مقدار جدیدی، مجددا مورد استفاده قرار گیرد.

برای مثال برنامه محاسبه فاکتوریل را در نظر بگیرید. تعریف فاکتوریل به شکل زیر می باشد.

5! = 5 * 4 * 3 * 2 * 1

فاکتوریل را به شکل دیگری نیز می توان بیان نمود.

5! = 5 * 4!

و همینطور

4! = 4 * 3!

در مثال هایی مشابه این مورد که نتیجه جدید، از اجرای مجدد function با مقداری دیگر حاصل می شود، می توان از توابع خود فراخوان (Recursive function) استفاده نمود. بنابراین کدهای صحیح تر برنامه محاسبه فاکتوریل به شکل زیر می باشد.

<script>
  function fact(num) {
    if (num > 1) {
      return num * fact(num - 1);
    } else {
      return 1;
    }
  }
  var x = fact(5);
  alert(x);
</script>

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

return num * fact(num - 1);

این دستور معادل نکته ذکر شده می باشد:

5 * 4!

و تابع fact بار دیگر با مقدار 4 فراخوانی می شود و این تکرار آنقدر ادامه پیدا می کند تا با مقدار 1 فراخوانی شود.

فاکتوریل در جاوا اسکریپت