Fungsi Orde Tinggi

Fungsi orde tinggi adalah fungsi yang memanipulasi fungsi lain. Misalnya, sebuah fungsi dapat menerima fungsi-fungsi lain sebagai argumen dan/atau menghasilkan sebuah fungsi sebagai nilai kembali. Teknik-teknik fungsional yang kreatif seperti ini adalah konstruk kuat yang tersedia bagi Anda dalam JavaScript dan bahasa tingkat tinggi lainnya seperti python, lisp, dll.

Sekarang kita akan membuat dua fungsi sederhana, add_2 dan double, serta sebuah fungsi orde tinggi yang disebut map. map akan menerima dua argumen, func dan list (deklarasinya akan dimulai dengan map(func, list)), dan mengembalikan sebuah array. func (argumen pertama) akan menjadi sebuah fungsi yang akan diterapkan pada setiap elemen dalam array list (argumen kedua).

// Mendefinisikan dua fungsi sederhana
let add_2 = function (x) {
  return x + 2;
};
let double = function (x) {
  return 2 * x;
};

// map adalah fungsi keren yang menerima 2 argumen:
//  func    fungsi yang akan dipanggil
//  list    array nilai yang akan dipanggil oleh func
let map = function (func, list) {
  let output = []; // daftar keluaran
  for (idx in list) {
    output.push(func(list[idx]));
  }
  return output;
};

// Kami menggunakan map untuk menerapkan sebuah fungsi pada seluruh daftar masukan
// untuk "memetakkannya" menjadi daftar keluaran yang sesuai
map(add_2, [5, 6, 7]); // => [7, 8, 9]
map(double, [5, 6, 7]); // => [10, 12, 14]

Fungsi dalam contoh di atas sederhana. Namun, ketika digunakan sebagai argumen untuk fungsi lain, mereka dapat digabungkan dengan cara yang tidak terduga untuk membangun fungsi yang lebih kompleks.

Sebagai contoh, jika kita memperhatikan bahwa kita menggunakan pemanggilan map(add_2, ...) dan map(double, ...) sangat sering dalam kode kita, kita bisa memutuskan untuk membuat dua fungsi pemrosesan daftar yang bersifat khusus dan memiliki operasi yang diinginkan tertanam di dalamnya. Dengan menggunakan komposisi fungsi, kita bisa melakukannya sebagai berikut:

process_add_2 = function (list) {
  return map(add_2, list);
};
process_double = function (list) {
  return map(double, list);
};
process_add_2([5, 6, 7]); // => [7, 8, 9]
process_double([5, 6, 7]); // => [10, 12, 14]

Sekarang mari kita membuat fungsi yang disebut buildProcessor yang mengambil sebuah fungsi func sebagai input dan mengembalikan pemroses func, yaitu, sebuah fungsi yang menerapkan func pada setiap masukan dalam daftar.

// sebuah fungsi yang menghasilkan pemroses daftar yang melakukan
let buildProcessor = function (func) {
  let process_func = function (list) {
    return map(func, list);
  };
  return process_func;
};
// memanggil buildProcessor mengembalikan sebuah fungsi yang dipanggil dengan masukan daftar

// dengan menggunakan buildProcessor, kita bisa menghasilkan pemroses daftar add_2 dan double seperti ini:
process_add_2 = buildProcessor(add_2);
process_double = buildProcessor(double);

process_add_2([5, 6, 7]); // => [7, 8, 9]
process_double([5, 6, 7]); // => [10, 12, 14]

Mari kita lihat contoh lain. Kita akan membuat sebuah fungsi yang disebut buildMultiplier yang mengambil sebuah angka x sebagai masukan dan mengembalikan sebuah fungsi yang mengalikan argumennya dengan x:

let buildMultiplier = function (x) {
  return function (y) {
    return x * y;
  };
};

let double = buildMultiplier(2);
let triple = buildMultiplier(3);

double(3); // => 6
triple(3); // => 9

results matching ""

    No results matching ""