JavaScript даги rest оператори
Бу дарсни бир оз изоҳ билан бошлаймиз.
Бу бўлимнинг олдинги барча дарсларида мен
сизга ... оператори хакида тўлиқ
хакикатни айтганим йўқ.
Аслида, бу оператор коддаги жойига қараб спред (spread) оператори ёки рест (rest) оператори деб номланиши мумкин.
Сиз билланинг, спред оператори массив ёки
матн олдида турганда, уларни алохида
қийматларга ажратади. Рест оператори,
... кўринишида бўлса-да,
бошқа мақсад учун ишлатилади.
Энди унинг нега кераклигини тушунамиз. Фарз қилайлик, бизда икки параметр қабул қилувчи функция бор:
function func(a, b) {
console.log(a);
console.log(b);
}
Сиз билишингиз керак, агар функцияга ортиқча параметрлар берилса, бу хатоликка олиб келмайди:
func(1, 2, 3, 4, 5);
rest оператори барча ортиқча параметрларни
массив кўринишида олиш имконини беради. Бунинг учун
функцияга яна битта параметр қўшилади (албатта
охиргиси), унинг олдига 3 нуқта қўйилади:
function func(a, b, ...rest) {
}
Бу уч нуқта рест оператори бўлиб, ўзгарувчининг номи
исталганча номланиши мумкин, лекин
оддата уни ҳам rest деб номлаш урфий хисобланади.
Келинг, функциямизни ортиқча
параметрлар билан чақириб кўрамиз ва a ва b параметрларига
нима тушганини, қолгани эса rest га
нима тушганини кўрамиз:
func(1, 2, 3, 4, 5);
function func(a, b, ...rest) {
console.log(a); // 1 ни кўрсатади
console.log(b); // 2 ни кўрсатади
console.log(rest); // [3, 4, 5] ни кўрсатади
}
Агар ортиқча параметрлар бўлмаса, ўзгарувчи
restга бош массив ёзилади:
func(1, 2);
function func(a, b, ...rest) {
console.log(a); // 1 ни кўрсатади
console.log(b); // 2 ни кўрсатади
console.log(rest); // [] ни кўрсатади
}
Функцияда умуман параметрлар бўлмаслиги мумкин,
лекин унга rest қўшиш мумкин.
Бу ҳолда функция исталган миқдордаги параметрлар
билан чақирилиши мумкин ва уларнинг барчаси
rest массивига тушadi:
function func(...rest) {
console.log(rest);
}