پارامترهای Rest در جاوا اسکریپت

در این آموزش چگونگی استفاده از پارامترهای rest جاوا اسکریپت برای جمع کردن پارامترها و قرار دادن آنها در یک آرایه را می آموزید.

معرفی پارامترهای rest جاوا اسکریپت

ES6 نوع جدیدی از پارامترها معین کرده به نام پارامترهای rest که دارای پیشوند سه نقطه ای (…).هستند. پارامتر rest به شما اجازه می دهد یک عدد بی نهایت از نشانگرهای یک آرایه را نشان دهید.

دستور زیر را مشاهده کنید:

function fn(a,b,...args) {
   //...
}

پارامتر آخر ( args) که سه نقطه پیشوندش قرار گرفته ( …)، پارامتر rest نام دارد ( …args).

تمام نشانگرهایی که به تابع انتقال می دهید در لیست پارامتر ثبت خواهد شد. در دستور قبل اولین نشانگر بصورت a ثبت شد، دومی بصورت b و به همین صورت سومی و چهارمی و الی آخر، همه در پارامتر rest args به عنوان یک آرایه ذخیره می شود. مثال زیر را مشاهده کنید:

fn(1,2,3,'A','B','C');

آرایه args مقادیر زیر را ذخیره می کند:

[۳,'A','B','C']

مثال های دیگر پارامترهای rest جاوا اسکریپت

مثال زیر را مشاهده کنید:

function sum(...args) {
    let total = 0;
    for (const a of args) {
        total += a;
    }
    return total;
}
 
sum(1, 2, 3); // 6

در این مثال، args در یک آرایه است، بنابراین می توانیم از for of loop برای تکرار عنصر آن و جمع آنها استفاده کنیم.

فرض می کنیم که فراخوانی تابع sum() ممکن است نشانگرها را با انواع مختلف اطلاعات مانند عدد، رشته، boolean و غیره را انتقال دهد، و شما فقط بخواهید کل اعداد را محاسبه کنید:

function sum(...args) {
    return args.filter(e => typeof e === 'number')
        .reduce((prev, curr)=> prev + curr);
}

توجه داشته باشید که بدون پارامترهای rest، باید از شی نشانگرهای تابع استفاده کنید. اما، شی نشانگرها بخودی خود یک نمونه از آرایه نیست، بنابراین نمی توانید از متد فیلتر مستقیما استفاده کنید.

در ES5 با از Array.prototype.filter.call() مانند نمونه استفاده کنید:

function sum() {
    return Array.prototype.filter.call(arguments, e => typeof e === 'number')
      .reduce((prev, curr) => prev + curr);
}

همانطور که می بینید، پارامتر rest کد را کاربردی تر می کند.

فرض کنید نیاز به فیلتر کردن نشانگرها براساس یک نوع خاص مثل اعداد، رشته ها، تهی، boolean و غیره داشته باشید. تابع زیر برای این کار به شما کمک می کند:

function filterBy(type, ...args) {
    return args.filter(e => typeof e === type);
}

پارامترهای rest جاوا اسکریپت و تابع arrow

یک تابع arrow شی arguments ندارد، بنابراین اگر بخواهید یک عدد از نشانگرها را به تابع arrow انتقال دهید، باید از پارامترهای rest استفاده کنید.

مثال زیر را مشاهده کنید:

const concat = (...args) => {
    return args.reduce((prev, curr) => prev + ' ' + curr);
};
let message = concat('JavaScript', 'Rest', 'Parameters'); // =>
console.log(message); // JavaScript Rest Parameters

تابع concat() یک arrow است که یک عدد بی نهایت نشانگرها را می گیرد و این نشانگرها را بهم متصل می کند.

پارامتر rest جاوا اسکریپت در تابع dynamic

جاوااسکریپت به شما اجازه می دهد که توابع dynamic را از طریق سازنده Function ایجاد کنید. همچنین استفاده از پارامتر rest در تابع dynamic ممکن است. مانند مثال زیر:

var showNumbers = new Function('...numbers', 'console.log(numbers)');
showNumbers(1, 2, 3); // [1,2,3]
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 4٫00 out of 5)
Loading...
counter customizable free hit