Mojtaba Shafiee
Mojtaba Shafiee
خواندن ۳ دقیقه·۴ سال پیش

توابع کلاس اول (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 حتی در زبان های برنامه نویسی دیگه اطلاعات کسب کنید میتونید از ویکی پدیا
استفاده کنید.

توابع کلاس اولfirst class functionfirst class functions چیست؟first class functions javascriptتوابع کلاس اول در جاوا اسکریپت
هر باگی مخرب نیست. بعضی باگ ها باید بیان و برن تا قدر فیچر های زندگیمون رو بدونیم :)
شاید از این پست‌ها خوشتان بیاید