توابع کلاس اول (First-class functions)

به هر زبان برنامه نویسی که با توابع خود مثل شهروند درجه اول برخورد کند؛ میگوییم آن زبان برنامه نویسی داراری توابع کلاس اول میباشد. در واقع باید زبان مورد نظر از این ویژگی ها ساپورت کند:

  • اختصاص دادن مقدار یک تابع به یک متغیر.
  • فرستادن تابع به عنوان آرگومان تابعی دیگر.
  • برگردانندن یک تابع به عنوان مقدار نهایی یک تابع دیگر.
  • ذخیره کردن تابع در داده ساختار های مختلف.
  • بتواند متد ها و ویژگی های خاص خودش را نگه دارد.
// Function definition
function speak() {
  console.log('Hello');
}
speak();                     // logs &quotHello&quot
// Store in a variable
var talk = speak;
talk();                         // logs &quotHello&quot
// Pass as an argument to a function
function functionCaller(fn) {
  fn();
}
functionCaller(speak);      // logs &quotHello&quot
// Return from a function
function functionReturner(fn) {
  return function(name) {
    return `${fn()} ${name}`;
  }
}
function returnHi() {
  return 'Hi';
}
let greeting = functionReturner(returnHi)('Ali');
console.log(greeting);               // logs &quotHello Ali&quot
// Store in a data structure
const  myFuncs = [talk];
myFuncs[0]();       // logs &quotHello&quot
// Owns properties
talk.myProperty = &quotbananas"
console.log(talk.myProperty);       // logs &quotbananas&quot

ابتدا در خط دوم تابع ()speak رو تعریف کردیم که عبارت "Hello" رو چاپ میکنه؛ و توی خط ۵ اون رو صدا زدیم (call).

در خط ۸ همانطور که میبینید توانستیم تابع رو به یک متغیر نسبت بدیم و همواره talk === speak صحیح میباشد.

در خط ۱۲ ویژگی مورد علاقه من نمایش داده شده (پاس دادن تابع به تابعی دیگر به عنوان آرگومان :))
به همین خاطره که در توابعی مثل setTimeout آرگومان اول یک تابع است.
(نکته اخلاقی: هیچوقت برای پاس دادن یک تابع به عنوان آرگومان از پرانتز استفاده نکنید! چون به معنای فراخوانی اون تابع محسوب میشه و همونجا اجرا میشه)

خط هفدهم یک تابع به عنوان مقدار نهایی یک تابع دیگر برگشت داده میشود که خود دارای یک آرگومان دیگر است و در خط ۲۵ به نحو نمایش داده شده آرگومان ها به تابع پاس داده میشوند.

خط ۲۸ تابع talk که در بالا تر تعریف کردیم به عنوان مقدار صفرم آرایه myFuncs ست میشود که نشان دهنده همان ویژگی "ذخیره کردن تابع در داده ساختار های مختلف" میباشد.

در خط ۳۱ یک ویژگی یا property به تابع (اینجا مثل آبجکت:)) نسبت داده میشه و در خط بعدی داخل کنسول نمایش داده میشود.


امیدوارم این مقاله مورد پسنده شما بوده باشه؛ سعی کردم از توضیحاتم کم کنم... اما اگر مشتاقید راجب first-class functions حتی در زبان های برنامه نویسی دیگه اطلاعات کسب کنید میتونید از ویکی پدیا
استفاده کنید.