Peyman
Peyman
خواندن ۲ دقیقه·۲ سال پیش

مفهوم absraction و Call back function

خب همونطوریکه توضیح دادیم Higher-order function ها چی هستن و یدونه اختصاصیش رو هم برای خودمون ساختیم حالا وقتشه که بیشتر وارد جزییات بشیم و ببینیم توابع callback چی هستن


قبل از هرچیزی بهتره بدونیم که صدا کردن یا Call کردن یه فانکشن یعنی عملیاتی کردن اون تابع در همون لحظه درحالیکه پاس دادن مقدار اون تابع به معنای عملیاتی کردن در همون لحظه نیست مثلا:

const lowerLetter= fucntion (str) { str.toLowerCase() }

ما لحظه ایکه از تابع .toLowerCase استفاده میکنیم میخوایم اون تابع رو عملیاتی کنیم پس صداش میکنیم برای همین هم هست که از () استفاده میکنیم اما برای استفاده از تابع lowerLetter باید با مفهوم callBack آشنابشیم:

جاوااسکریپت همیشه از این callback function ها داره استفاده میکنه مثلا زمانیکه ما از متد addEventListener یا forEach استفاده میکنیم. تابع زیر رو در نظر بگیرید:

const sayHello= funciton( ) { console.log( &quot hello &quot); }

حالا اگر بیایم و اون رو به عنوان یک آرگومان به تابع addEventListener بفرستیم:

btn.addEventListener ('click', sayHello)

یعنی به محض اینکه رویدادی click روی btn اتفاق افتاد addEventListener بیاد و مقدار تابع sayHello رو پاس بده یا توی مثال زیر:

[&quotPeyman&quot, &quotReza&quot, &quotNima&quot].forEach(sayHello)

برنامه میاد و به تعداد عناصر موجود توی آرایه مقدار تابع sayHello رو پاس میده

اما چرا باید از call back function ها استفاده کرد؟

بهمون اجازه میده که کدهامون رو به اجزای کوچیک تر که بارها قابل استفاده هستن تبدیل کنیم

اما دلیل دوم و مهمتر اینه که ما میتونیم abstraction بسازیم

اما abstraction چیه؟

یعنی ما جزییات پیاده سازی کدها رو پنهان کنیم چون همه اون جزییات برای ما مهم نیستن بنابراین میتونیم به مسایل مهمتری توی کدمون بپردازیم به کد زیر توجه کنین:

const transformer = function (str, fn) { console.log(` Original strign: ${str}`); console.log(` Transformed strign: ${ fn ( str ) }`); }

حالا اگر ما بیایم و یک رشته ای به این تابع Transformer بدیم و یک تابع هم مثل onWord یا firstUpper هم به عنوان تابع براش مشخص کنیم:

transformer(&quotHi this is peyman&quot, onWord) ======>>> hithisispeyman transformer(&quotjavascript is fun&quot, firstUpper ) =======>>> JAVASCRIPT is fun

دیگه تابع transformer کاری نداره که توابعی که به صورت آرگومان بهش پاس داده میشن چطور قراره عملیات خودشون رو انجام بدن یا چه جزییاتی دخیل هستن ، تنها وظیفه ای که تابع transformer به عنوان یک تابع مرتبه بالا Higher-order function داره اینه که رشته رو بگیره و اون رو در اختیار توابعی که وظیفشون اعمال تغییرات روی اون رشته هستندقرار بده(اصطلاحا به این کار میگن deligate)

امیدوارم مفید بوده باشه

abstractionjavascriptfunctional programming
از برنامه نویسی مینویسم،سعی میکنم مفاهیم سختش رو جوری که خودم یادمیگیرم توضیحشو بذارم شاید به درد کسی خورد.چون به جاوااسکریپت علاقمندم مثالهام بیشترشون حول جاوااسکریپت میچرخن
شاید از این پست‌ها خوشتان بیاید