JavaScript-এ একটি বিল্ট-ইন ... অপারেটর আছে, যা অনির্দিষ্ট সংখ্যক এলিমেন্ট নিয়ে কাজ করা সহজ করে তোলে। প্রসঙ্গ অনুযায়ী এটিকে রেস্ট অপারেটর বা স্প্রেড অপারেটর বলা হয়।
অ্যাসাইনমেন্টের বাম দিকে যখন ... থাকে, তখন ওই তিনটি ডটকে rest অপারেটর বলা হয়। তিনটি ডটের সঙ্গে একটি ভ্যারিয়েবলের নাম মিলে যা হয়, তাকে রেস্ট এলিমেন্ট বলে। এটি শূন্য বা তার বেশি মান সংগ্রহ করে এবং সেগুলো একটি অ্যারেতে জমা রাখে।
const [a, b, ...everythingElse] = [0, 1, 1, 2, 3, 5, 8];
a;
// => 0
b;
// => 1
everythingElse;
// => [1, 2, 3, 5, 8]
লক্ষ্য করুন, অন্য কিছু ভাষার বিপরীতে JavaScript-এ একটি rest এলিমেন্টের পরে কমা রাখা যায় না। ডিস্ট্রাকচারিং অ্যাসাইনমেন্টে এটি অবশ্যই শেষ এলিমেন্ট হতে হবে। নিচের উদাহরণটি একটি SyntaxError থ্রো করে:
const [...items, last] = [2, 4, 8, 16]
অ্যারের মতোই, এক বা একাধিক অবজেক্ট প্রপার্টি সংগ্রহ করে একটি অবজেক্টে জমা রাখতেও রেস্ট অপারেটর ব্যবহার করা যায়।
const { street, ...address } = {
street: 'Platz der Republik 1',
postalCode: '11011',
city: 'Berlin',
};
street;
// => 'Platz der Republik 1'
address;
// => {postalCode: '11011', city: 'Berlin'}
ফাংশন ডিফাইনের সময় শেষ আর্গুমেন্টের পাশে যখন ... থাকে, তখন সেই প্যারামিটারটিকে রেস্ট প্যারামিটার বলা হয়। এটি ফাংশনটিকে অনির্দিষ্ট সংখ্যক আর্গুমেন্ট অ্যারে হিসেবে নিতে দেয়।
function concat(...strings) {
return strings.join(' ');
}
concat('one');
// => 'one'
concat('one', 'two', 'three');
// => 'one two three'
অ্যাসাইনমেন্টের ডান দিকে যখন ... থাকে, তখন এটিকে spread অপারেটর বলা হয়। এটি একটি অ্যারেকে এলিমেন্টের তালিকায় ছড়িয়ে দেয়। রেস্ট এলিমেন্টের বিপরীতে এটি অ্যারে লিটারাল এক্সপ্রেশনের যেকোনো জায়গায় থাকতে পারে, এবং একাধিকও থাকতে পারে।
const oneToFive = [1, 2, 3, 4, 5];
const oneToTen = [...oneToFive, 6, 7, 8, 9, 10];
oneToTen;
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const woow = ['A', ...oneToFive, 'B', 'C', 'D', 'E', ...oneToFive, 42];
woow;
// => ["A", 1, 2, 3, 4, 5, "B", "C", "D", "E", 1, 2, 3, 4, 5, 42]
অ্যারের মতোই, এক অবজেক্ট থেকে আরেক অবজেক্টে প্রপার্টি কপি করতেও স্প্রেড অপারেটর ব্যবহার করা যায়।
let address = {
postalCode: '11011',
city: 'Berlin',
};
address = { ...address, country: 'Germany' };
// => {
// postalCode: '11011',
// city: 'Berlin',
// country: 'Germany',
// }