Muhammad Fauzan (fzn0x) - Blog

Just a penny about pattern matching

Dibawah ini adalah pattern matching yang mengandalkan value untuk matchingnya, pattern matching atau bahasa indonesianya "Pencocokan pola" simplenya adalah teknik untuk mencocokan value, struktur data, dan fungsi dalam bentuk sederhana.

Image description

Untuk memahami pattern matching kalian perlu paham 3 parts dari fundamental Pattern Matching terlebih dahulu yaitu algebraic data types / disjoint unions, kenapa? kalian pakai pattern matching dan kenapa itu mantap?

Untuk algebraic data types, kalian anggap saja sebagai container sederhana yang bisa di-define secara rekursif ( container(value) => condition = value | condition = value | condition = value; ), kalau di OCaml kalian akan disediakan rec keyword untuk menjalankannya secara recursive, sebagai contoh:

let rec sum = function | [] -> 0 | h::t -> h + sum t

lalu kalian jalankan fungsi tersebut di https://try.ocamlpro.com/ menggunakan command: sum [2;3;4];; kalian akan mendapatkan hasil 9 dalam bentuk integer

Kenapa seperti itu? simplenya ini adalah fungsi yang secara recursive memanggil fungsinya lagi, mari kita bedah:

let rec sum = function | [] -> 0 | h::t -> h + sum t

  1. let rec = container yang bisa RECURSIVE
  2. sum = function ya SUM function
  3. | [] -> 0 kalau mau 0 ya kasih dia empty list
  4. | h::t -> h + sum t secara recursive mengambil value dari kiri, lalu yang kanan dijadikan list mandiri tanpa elemen pertama untuk diambil lagi elemen pertamanya. Jadi kalau disingkat fungsi -> FIFO dan dapatkan elemen pertama dari fungsi selanjutnya -> fungsi -> FIFO dan dapatkan elemen pertama dari fungsi selanjutnya. Disini ada operator associativity (::) yang menghandle soal FIFO ini.

Apa itu FIFO? FIFO singkatan dari First In First Out, elemen yang pertama masuk ke lists (barang yang masuk pertama ke gudang), otomatis dia yang keluar duluan nantinya.

Tidak semua bahasa pemrograman bisa secara efektif melakukan pattern matching, salah satunya javascript yang memiliki proposal terkait pattern matching: https://github.com/tc39/proposal-pattern-matching