← Kembali ke kursus
Pelajaran kursus · Python
Pelajaran 36

Pattern matching: match/case

Switch-case modern Python 3.10+ dengan destructuring.

Pahami konsepnya

match/case adalah switch-case modern Python (3.10+): satu nilai menghadapi banyak pola. Bedanya dari switch klasik: pola bisa berupa literal (case 200:), tipe (case int():), sequence (case [x, y]:), dict (case {"nama": n}:), bahkan guard (case n if n > 100:). Penulisan case int: justru menangkap nilai ke variabel bernama int, bukan menguji tipe.

Destructuring adalah kunci: case [aksi, nilai]: memecah list dua elemen langsung ke variabel. Ini menggantikan if/elif panjang untuk command dispatch — case "tambah":, case "hapus": lebih terbaca.

Pola bisa digabung dengan | (or): case 200 | 201 | 202: cocok untuk salah satu. Wildcard _ menampung sisanya. Tidak ada fallthrough — tiap case berdiri sendiri seperti yang diharapkan.

Coba contoh kode

def proses(perintah):
    match perintah:
        case ["tambah", x, y]:
            return x + y
        case ["kurang", x, y]:
            return x - y
        case ["info", nama] if len(nama) > 2:
            return f"Halo {nama}"
        case _:
            return "Tidak dikenal"

print(proses(["tambah", 3, 5]))   # 8
print(proses(["kurang", 10, 4]))  # 6
print(proses(["info", "Ari"]))    # Halo Ari
print(proses(["hapus"]))          # Tidak dikenal

Destructuring ["tambah", x, y] memecah list dan mengikat x, y langsung; guard if len(nama) > 2 menyaring pola info. Wildcard _ menampung sisanya. Ini jauh lebih terbaca daripada if/elif berantai dengan indexing manual.

Latihan singkat

Uji: match ["tambah",10,20]→`30`; ["kurang",10,20]→`-10`.