سلام دوستان. توی این قسمت می‌خوایم پارامتر رست (Rest) رو بررسی کنیم که به ما کمک می‌کنه کدهایی با حجم کمتر، خواناتر و با قابلیت توسعه بیشتری داشته باشیم.

توی این قسمت موارد زیر رو یاد می‌گیریم:

 

مشکل کجاست؟

فرض کنیم تابعی داریم که ۲ عدد رو با هم جمع می‌کنه:

const add = (a, b) => a + b;

حالا می‌خوایم کاری کنیم که این تابع ۳ عدد رو با هم جمع کنه. شاید چیزی که به ذهنمون برسه اینه که بریم تابع رو دستکاری و یک پارامتر دیگه تعریف کنیم:

const add = (a, b, c) => a + b + c;

اگه توی شرایطی بخوایم همزمان ۲ عدد، ۴ عدد، ۵ عدد و ... رو با هم جمع کنیم چطور؟ یا باید برای هر جمع یک تابع اختصاصی تعریف کنیم یا اینکه کاری کنیم تابع تعداد ورودی‌های دلخواهی بگیره. مورد دوم قطعاً منطقی‌تر به حساب میاد. توی جاوااسکریپت پارامتر رست به ما کمک می‌کنه که چنین قابلیتی داشته باشیم 👌

 

پارامتر رست (Rest) چیه؟ 🤔

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

ساختار پارامتر رست مقداری متفاوت با پارامترهای معمولی که توی توابع داشتیم هست. این پارامتر با گذاشتن سه‌نقطه ... قبل از اسم یک پارامتر ساخته میشه:

function add(...numbers) {

}

حالا تابع add می‌تونه بی‌نهایت ورودی داشته باشه، بدون اینکه مجبور بشیم برای هر تعداد ورودی تابع رو دستکاری کنیم 👌

الان مقدار پارامتر numbers یک آرایه متشکل از همه ورودی‌هایی هست که به تابع پاس داده میشه. کد زیر رو اجرا کنین و کنسول مرورگر رو ببینین:

function add(...numbers) {
  console.log(numbers);
}

add(1, 3);
add(2, 5, 8);
add(3, 7, 11, 15);

همونطور که می‌بینیم استفاده کردن از تابعی که پارامتر رست داره هیچ تفاوتی با بقیه توابع نداره.

حالا می‌تونیم خیلی راحت تابع رو بازنویسی کنیم. کافیه یک حلقه ساده روی که یک آرایه هست بزنیم: