Pattern Matching Pada Javascript

Bagi kalian yang sudah pernah atau sering menggunakan bahasa pemrograman functional pasti sudah tidak asing lagi dengan pattern matching, tetapi pattern matching juga ada di bahasa pemrograman imperative yang mendukung pattern matching misalnya Rust.

Contoh pattern matching di Rust adalah sebagai berikut:

let angka = 1;

match angka {
	1 => println!("Satu"),
    2..=5 => println!("Dua sampai Lima"),
    _ => println!("Berapa saja selain diatas")
}

Sedangkan berikut ini salah satu contoh pattern matching untuk bahasa pemrograman elixir:

angka = 7

case angka do
  1 -> IO.puts("Satu")
  x when x < 6 -> IO.puts("Dua sampai Lima")
  _x -> IO.puts("Berapa saja selain diatas")
end

Untuk membuat pattern matching seperti contoh diatas kita dapat menerapkannya dengan fungsi berikut ini.

function matcher(pattern) {
  return (input) => {
    const patternFound = pattern[input];
    if (!patternFound) {
      return pattern['x'](input)
    };
    return patternFound(input);
  };
}

const match = matcher({
  1: () => console.log('Satu'),
  2: () => console.log('Dua sampai Lima'),
  3: () => console.log('Dua sampai Lima'),
  4: () => console.log('Dua sampai Lima'),
  5: () => console.log('Dua sampai Lima'),
  x: (n) => {
    console.log('x', n);
  }
})

match(12);

Tentu saja fungsi yang dibuat tersebut masih banyak memiliki kekurangan seperti memilih range tertentu untuk angka.

Jika menginginkan feature yang lebih banyak untuk pattern matching di Javascript kita bisa menggunakan https://github.com/z-pattern-matching/z atau menunggu proposal berikut https://github.com/tc39/proposal-pattern-matching

Aldi Perdana

Aldi Perdana