Soal 1Apa yang dicetak kode berikut?items = [10, 20, 30]
if (n := len(items)) >= 2:
print(n)
Walrus Operator := untuk Assign dan Menguji dalam Satu Baris
Pelajari operator walrus := Python 3.8 untuk meng-assign sekaligus menguji nilai dalam satu baris.
Walrus operator := diperkenalkan di Python 3.8 agar kamu bisa assign dan menguji dalam satu baris. Bentuk := terlihat seperti taring walrus — dari situlah namanya. Ia mengurangi boilerplate saat nilai yang sama dipakai ulang di dalam kondisi if atau while.
Dasar walrus operator
= biasa adalah statement dan tidak bisa muncul di dalam ekspresi — jadi kamu tidak bisa meletakkannya di kondisi if atau while. := adalah ekspresi, sehingga ia bisa masuk langsung ke dalam kondisi.
Dengan variabel := ekspresi, kamu meng-assign hasilnya ke variabel dan memakai nilai yang sama sebagai nilai kondisi.
Kolom kiri (biasa) menulis assignment dan pengujian di baris terpisah. Kolom kanan (walrus) meng-assign dan menguji dalam satu kondisi.
# Gaya biasa (dua baris)
cart = ["apel", "roti", "susu", "telur"]
n = len(cart)
if n >= 3:
print(f"{n} item: gratis ongkir")
# Versi walrus (satu baris: assign + uji)
if (n := len(cart)) >= 3:
print(f"{n} item: gratis ongkir")
# Output: 4 item: gratis ongkir
Bungkus dengan tanda kurung di dalam kondisi
if n := len(cart) >= 3: tanpa tanda kurung mengevaluasi len(cart) >= 3 terlebih dahulu dan meng-assign True/False ke n. Idiomnya adalah (n := len(cart)) >= 3 — bungkus assignment-nya dengan tanda kurung.
Memakai walrus operator dengan if
Pola umum di if adalah butuh nilai yang diuji juga di dalam badan. Biasanya kamu memisah "assign, lalu uji" ke dua baris, tapi walrus operator memungkinkanmu menulisnya sekali, tepat di tempat nilai itu dibutuhkan.
# Bercabang berdasarkan jumlah hasil pencarian, lalu dipakai di badan
search_results = ["Buku A", "Buku B", "Buku C", "Buku D", "Buku E"]
if (hit_count := len(search_results)) >= 3:
print(f"{hit_count} hasil ditemukan")
else:
print("Hasil terlalu sedikit")
# Output: 5 hasil ditemukan
Memakai walrus operator dengan while
Di while, walrus bersinar ketika kamu ingin nilai yang ditarik keluar menjadi kondisi sekaligus sesuatu yang kamu pakai di dalam badan.
Setiap iterasi memeriksa apakah antrean kosong lebih dulu. Jika kosong, short-circuit evaluation melewati pop() dan keluar dari loop. Jika tidak, queue.pop(0) mengambil elemen depan dan meng-assign-nya ke task, lalu badan berjalan dengan task sebelum loop lagi.
# Mengosongkan antrean satu item per kali dari depan
pending_jobs = ["kirim email", "backup", "deploy"]
while pending_jobs and (job := pending_jobs.pop(0)):
print(f"memproses: {job}")
# memproses: kirim email / memproses: backup / memproses: deploy
# Begitu pending_jobs menjadi kosong, sisi kiri dievaluasi False dan pop() dilewati — loop keluar.
pending_jobs and (job := pending_jobs.pop(0)) keluar dari loop lewat short-circuit evaluation saat sisi kiri kosong (False). Itu menghindari bug memanggil pop() pada list kosong yang memicu IndexError.
Kapan memakainya dan kapan tidak
Walrus operator tidak menambah kemampuan di luar menghemat ketikan. Menulis logika dalam satu baris memang nyaman, tapi bisa juga menyakiti keterbacaan, jadi bersikaplah selektif kapan menggunakannya.
| Situasi | Rekomendasi | Mengapa |
|---|---|---|
| Memakai ulang nilai yang diuji di dalam badan | Pakai | Memisah dua baris menjauhkan variabel dari tempat pemakaiannya |
| Di while, memakai nilai hasil pop sebagai kondisi sekaligus di dalam badan | Pakai | Menggabungkan kondisi keluar loop dengan pengambilan |
| Komputasi rumit atau side effect di dalam kondisi | Hindari | Menyembunyikan pekerjaan di ekspresi membuat alur sulit diikuti |
| Hanya assignment biasa tanpa kondisi | Jangan pakai | `=` biasa lebih sederhana dan lebih mudah dibaca |
Di artikel ini kamu belajar cara memakai walrus operator := untuk menggabungkan assignment dan pengujian menjadi satu ekspresi.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Mana cara yang benar untuk memakai walrus operator di dalam kondisi if?
Soal 3Pernyataan mana yang paling tepat menggambarkan walrus operator :=?