Operesheni rest katika JavaScript

Somo hili tutaanzia na maelezo fulani. Masomo yote yaliyopita ya sehemu hii mimi sikuwa nimewaambieni ukweli wote kuhusu operesheni ...

Kweli ni kwamba operesheni hii kulingana na mahali palipo kwenye msimbo inaweza kuitwa ama operesheni spread, ama operesheni rest.

Kama tayari unavyojua, wakati operesheni spread ipo mbele ya safu (array) au mkondo (string), inaigawanya kuwa maadili ya mtu mmoja mmoja. Operesheni rest, ingawa ina sintaksia sawa kama ..., ni ya kutumika kwa jingine.

Sasa tutachambua, ni kwa nini. Wacha tuwe na kitendo (function) kinachokubana vigezo viwili:

javascriptfunction func(a, b) {
  console.log(a);
  console.log(b);
}

Unapaswa kujua tayari, kwamba ikiwa utapeana vigezo vya ziada kwenye kitendo, haitasababisha hitilafu:

javascriptfunc(1, 2, 3, 4, 5);

Operesheni rest inaruhusu kupata vigezo vyote vya ziada kwa umbo la safu (array). Kwa hili kwenye kitendo huongezwa kigezo kingine (lazima kiwe cha mwisho), mbele ambayo huandikwa 3 nukta:

javascriptfunction func(a, b, ...rest) {
  
}

Nukta hizi tatu ndizo operesheni rest, na jina la kutofautisha linaweza kuwa na jina lolote, lakini kwa kawaida pia hupewa jina rest.

Wacha tuite kitendo chetu kwa kiwango cha ziada cha vigezo na tuone, nini huingia kwenye vigezo a na b, na nini - kwenye mabaki rest:

javascriptfunc(1, 2, 3, 4, 5);

function func(a, b, ...rest) {
  console.log(a);    // itaonyesha 1
  console.log(b);    // itaonyesha 2
  console.log(rest); // itaonyesha [3, 4, 5]
}

Ikiwa hakuna vigezo vya ziada, basi kwenye kutofautisha rest kitaandikwa safu tupu:

javascriptfunc(1, 2);

function func(a, b, ...rest) {
  console.log(a);    // itaonyesha 1
  console.log(b);    // itaonyesha 2
  console.log(rest); // itaonyesha []
}

Kwenye kitendo kwa ujumla kunaweza kutokuwapo na vigezo, lakini wakati huo huo unaweza kuongeza rest. Kwa hali hii kitendo kinaweza kuitwa kwa kiwango chochote cha vigezo na yote yataingia kwenye safu rest:

javascriptfunction func(...rest) {
  console.log(rest);
}