Pattern Matching di Function Head
Penjelasan
Elixir mengizinkan sebuah fungsi didefinisikan dengan BEBERAPA clause (persamaan) berbeda, masing-masing untuk bentuk parameter yang berbeda — Elixir mencoba dari clause PALING ATAS, dan menjalankan clause pertama yang polanya cocok dengan argumen yang diberikan. Ini mirip pattern matching Haskell, sangat idiomatik di Elixir untuk mengganti if/else berjenjang.
Contoh Konsep
defmodule Deskripsi do
def angka(0), do: "nol"
def angka(1), do: "satu"
def angka(_), do: "banyak" # _ = wildcard, cocok apa saja
end
Deskripsi.angka(0) # "nol"
Deskripsi.angka(5) # "banyak"
defmodule Hasil do
def proses({:ok, data}), do: "Sukses: #{data}"
def proses({:error, alasan}), do: "Gagal: #{alasan}"
end
Praktikum
Buat module Sapaan dengan fungsi sapa/1 yang punya clause berbeda untuk "Budi" (mengembalikan sapaan khusus) dan clause default untuk nama lain (sapaan umum).
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Urutan clause SANGAT penting — clause yang lebih spesifik harus ditulis LEBIH DULU, clause dengan wildcard `_` sebagai fallback harus di PALING BAWAH, persis seperti pattern matching di Haskell.