جاوا اسکریپت نسخه جدید ES6 – قدرت توابع با Default + Rest + Spread

جاوا اسکریپت نسخه جدید ES6 – قدرت توابع با Default + Rest + Spread

توابع (Function) ها در جاوا اسکریپت دست خوش تغییرات بسیاری شده است همانطور که در قسمت قبل دیدیم Arrow Function ها که نحو جدیدی از تعریف توابع در جاوا اسکریپت هستند که یکی از تغییرات در function های جاوا اسکریپتی است.
حال میخواهیم به سه تغییر و یا بهتر است بگوییم قابلیت جدیدی که به توابع اضافه شده اند را بررسی و یاد بگیریم.

مقدار پیش فرض آرگومان های تابع یا Default Parameter Value:

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

حتی برخی به جای این کار از if ها و شرط های کامل استفاده میکردند اما حال در ES6 به جای انجام چنین کارهای طولانی، به راحتی میتوان در هنگام تعریف تابع در قسمت پارامتر ها مقدار پیش فرض آن را نیز مشخص کرد به صورت زیر:

به همین سادگی دو پارامتر name و family را در محل تعریف آن ها مقدار پیش فرض دادیم.

مقادیر زنجیره ای با Rest:

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

اما حال اگر بخواهید قبل از اینکه مقادیر سری را دریافت کنید یک پارامتر دیگر یا حتی چند پارامتر دیگر دریافت کنید چه میکنید؟ باید آرایه arguments را بشکنید و سپس مقادیر ابتدایی را برداشته و سپس عملیات مورد نظر را روی پارامتر بعدی انجام دهید.
اما در ES6 به راحتی میتوانید مقادیر سری تعریف کنید این قابلیت در ES6 با نام Rest شناخته می شود. برای مثال تابعی تعریف میکنیم که زنجیره ای از اعداد را دریافت میکند اگر عدد اول بزرگتر از حاصل جمع اعداد دریافتی بعدش بود مقدار true برگرداند در غیر اینصورت مقدار false:

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

فرستادن مقادیر زنجیره به توابع باSpread :

فرض کنید میخواهید پنجاه عدد را به تابعی Pass کنید چه کار میکنید؟ تک تک به تابع Pass می کنید؟ اگر مقادیر توسط حلقه ای در آرایه ای ذخیره شده بودند چه کار میکنید؟
کار های بسیاری تا قبل از ارائه ES6 میتوان انجام داد که هر کدام مشکلات خاص خود را داشت یا پیچیده بود یا کامل نبود اما در ES6 با قابلیت Spread میتوانید به جای وارد کردن تمام مقادیر پارامتر های تابع یک آرایه به تابع Pass کنید.
مثال قبل را به صورت زیر اجرا کردیم:

اما میتوانیم به صورت زیر اجرا کنیم:

دیدید اگر بخواهیم که مقادیری به تابع Pass کنیم از آرایه ای خوانده شود قبل از pass کردن آن آرایه (...) سه نقطه میگذاریم. همچنین این قابلیت فقط برای توابعی که از قابلیت Rest استفاده میکنند نیست و هر تابعی که آرگومان هایی دریافت میکند میتوان با Spread فراخوانی شود.
Default, Rest, Spread از قابلیت های جدیدی است که به ES6 اضافه شده است و روند برنامه نویسی Functional را بهبود می بخشد. در کنار Arrow Function ها برنامه نویسی Functional شیرین تر میشود.
در قسمت بعد با برنامه نویسی شی گرا در ES6 و قابلیت class ها وراثت و … آشنا میشویم.