Dalam artikel ini, kita akan sama – sama belajar tentang beberapa varian penggunaan dynamic arguments pada deklarasi fungsi di Javascript.

Misal, kita memiliki fungsi sebagai berikut:

function tambah () {

}

Lalu, bagaimana caranya agar fungsi tersebut dapat kita panggil dengan cara seperti menggunakan varargs di Java, func_get_args di PHP seperti ini?

tambah(1, 2);
tambah(1, 2, 3);
tambah(1, 2, 3, 4);
tambah(1, 2, 3, 4, ..., n);

Apakah kita harus mendeklarasikan fungsi tersebut seperti ini?

function tambah (a, b, c, d, ...dst) {
    var r = 0;
    r = (a || 0) + (b || 0) + (c || 0) + (d || 0) + ...dst
}

Namun, sepertinya cara ini tidak efektif. Kita tidak tahu sebanyak apa parameter yang akan dilewatkan. Ada beberapa teknik yang digunakan (ini hasil pengamatan di lapangan).

Array as Arguments

Menggunakan array sebagai argument merupakan teknik yang umum dipakai.

function tambah(angka) {
    var r = 0, l = angka.length, i;
    for (i = 0; i < l; j++) {
        r += angka[i];
    }
}

tambah([1, 2]);
tambah([1, 2, 3]);
tambah([1, 2, 3, 4]);

Tapi, dengan teknik ini cara penggunaannya terlihat memaksa dan deklarasi fungsi kehilangan dokumentasi-nya.

Arguments to Array

Javascript memiliki keyword arguments yang berisi parameter apa saja yang dilewatkan pada saat dijalankan (at runtime). Arguments merupakan Array-like atau collection, agar menjadi array kita dapat mengkonversinya menggunakan slice().

function tambah(/*a, b, c, d, ...dst*/) {
    var p = Array.prototype.slice.call(arguments);
    var l = p.length;
    var r = 0;
    var i;

    // pake array.reduce() atau manual:
    for (i = 0; i < l; i++) {
        r += p[i];
    }
}

tambah(1, 2);
tambah(1, 2, 3);
tambah(1, 2, 3, 4);
tambah(1, 2, 3, 4, ..., n);

Advertisements