Belajar dengan membaca secara berurutan

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.

Assignment biasa vs. walrus operator
n = len(cart)if (n := len(cart))if n >= 3:evaluasi >= 3jalankan badanjalankan badanTrueassign + bacaTrue

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

Pakai walrus operator untuk memeriksa total keranjang belanja.

① Definisikan cart_prices = [1200, 800, 3500, 600] (harga setiap item).

② Di dalam kondisi if, tulis (total := sum(cart_prices)) >= 5000. Ketika total 5000 atau lebih, cetak "{total} yen: gratis ongkir"; selainnya cetak "{total} yen: kurang {5000 - total} yen lagi untuk gratis ongkir".

③ Setelah blok if, panggil print(total) untuk mengonfirmasi total yang sama masih dapat diakses di luar.

(Penjelasan akan muncul setelah kamu menjalankan kode dengan benar.)

Python Editor

Jalankan kode untuk melihat output

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.

while queue dan (task := queue.pop(0))
while loop dimulaiantrean kosong?task := queue.pop(0)keluar loop(selesai)pakai task di badaniterasi berikutnyatidak kosongkosong (False)dapat task

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.

Cetak daftar kandidat pencarian satu per satu dari atas.

① Definisikan candidates = ["Budi Santoso", "Siti Rahayu", "Adi Kusuma"].

② Pakai while candidates and (name := candidates.pop(0)): untuk pop satu dari depan dan cetak "Kandidat: {name}".

③ Setelah loop, cetak "Semua kandidat diperiksa".

Python Editor

Jalankan kode untuk melihat output

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.

SituasiRekomendasiMengapa
Memakai ulang nilai yang diuji di dalam badanPakaiMemisah dua baris menjauhkan variabel dari tempat pemakaiannya
Di while, memakai nilai hasil pop sebagai kondisi sekaligus di dalam badanPakaiMenggabungkan kondisi keluar loop dengan pengambilan
Komputasi rumit atau side effect di dalam kondisiHindariMenyembunyikan pekerjaan di ekspresi membuat alur sulit diikuti
Hanya assignment biasa tanpa kondisiJangan 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.

QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa yang dicetak kode berikut?
items = [10, 20, 30]
if (n := len(items)) >= 2:
print(n)

Soal 2Mana cara yang benar untuk memakai walrus operator di dalam kondisi if?

Soal 3Pernyataan mana yang paling tepat menggambarkan walrus operator :=?