Mengulang Selama... — Pseudocode

Bu Sri buru-buru membuka HP-nya untuk mengecek transferan pembeli. PIN-nya salah. Salah lagi. Baru yang ketiga benar. HP-nya gak tahu dari awal berapa kali Bu…

Bu Sri buru-buru membuka HP-nya untuk mengecek transferan pembeli. PIN-nya salah. Salah lagi. Baru yang ketiga benar. HP-nya gak tahu dari awal berapa kali Bu Sri bakal salah ketik. Dia cuma pegang satu aturan: selama PIN-nya belum cocok, minta lagi.

UNTUK di pelajaran tadi butuh jumlah putaran dari awal: sepuluh baris perkalian, tujuh hari tabungan. Kalau jumlahnya baru ketahuan sambil jalan, pakai SELAMA.

SELAMA ... AKHIR SELAMA

Tiap gelas es teh butuh dua es batu, dan di kotaknya tinggal lima:

esBatu ← 5
SELAMA esBatu > 0 LAKUKAN
    TULIS "Sisa es batu:", esBatu
    esBatu ← esBatu - 2
AKHIR SELAMA
TULIS "Es batu habis"
Sisa es batu: 5
Sisa es batu: 3
Sisa es batu: 1
Es batu habis

Kondisinya harus bisa berubah

Coba hapus baris esBatu ← esBatu - 2. Kondisi esBatu > 0 jadi BENAR terus, dan isinya diulang tanpa henti. Komputer kita menghentikannya setelah 10.000 langkah, dengan pesan "Perulangan di baris 2 gak pernah berhenti: esBatu gak berubah di dalamnya."

Jadi tiap kali menulis SELAMA, cari baris di dalamnya yang mengubah sesuatu di kondisinya. Kalau gak ada, perulangannya gak akan berhenti.

Membaca sampai ketemu tanda berhenti

SELAMA cocok untuk input yang jumlahnya gak tentu. Kasir Bu Sri mengetik harga barang satu per satu, lalu 0 kalau sudah selesai:

total ← 0
BACA harga
SELAMA harga ≠ 0 LAKUKAN
    total ← total + harga
    BACA harga
AKHIR SELAMA
TULIS "Total:", total

Dengan input 5000, 12000, 3000, lalu 0:

Total: 20000

Polanya: BACA sekali sebelum SELAMA, supaya kondisinya punya isi untuk diperiksa. Lalu BACA lagi di akhir tiap putaran, supaya harga berubah dan kondisinya bisa jadi SALAH. Kalau BACA yang di dalam lupa, harga gak pernah berubah, dan perulangannya gak berhenti.

ULANGI ... SAMPAI: jalan minimal sekali

SELAMA memeriksa di atas, sebelum putaran. ULANGI memeriksa di bawah, setelah putaran. Bedanya kelihatan kalau kondisinya sudah terpenuhi dari awal:

stok ← 0
SELAMA stok > 0 LAKUKAN
    TULIS "Jual satu"
    stok ← stok - 1
AKHIR SELAMA
TULIS "Selesai"
Selesai
stok ← 0
ULANGI
    TULIS "Jual satu"
    stok ← stok - 1
SAMPAI stok <= 0
TULIS "Selesai"
Jual satu
Selesai

ULANGI menjual satu barang padahal stoknya nol, karena isinya jalan dulu, baru diperiksa. Perhatikan juga kondisinya: SELAMA menulis kapan lanjut (stok > 0), SAMPAI menulis kapan berhenti (stok <= 0). ULANGI pas untuk hal yang memang harus terjadi minimal sekali, misalnya menanyakan PIN: belum ada yang bisa diperiksa sebelum ada yang mengetik.

Di JavaScript dan Python, SELAMA jadi while. ULANGI ... SAMPAI mirip do ... while di JavaScript, dengan kondisi yang dibalik. Python gak punya bentuk ini.

⚠️ Kenapa perulangannya gak mau berhenti?

TL;DR: SELAMA kondisi LAKUKAN ... AKHIR SELAMA mengulang isinya selama kondisinya BENAR. Kondisinya diperiksa sebelum tiap putaran, jadi isinya bisa jalan 0 kali. Sesuatu di dalamnya harus mengubah kondisinya, atau perulangannya gak berhenti dan komputer menghentikannya setelah 10.000 langkah. Untuk input yang jumlahnya gak tentu: BACA sekali sebelum SELAMA, lalu lagi di akhir tiap putaran. ULANGI ... SAMPAI kondisi memeriksa di bawah, jadi jalan minimal sekali, dan berhenti begitu kondisinya BENAR. Untuk menunggu angka yang naik atau turun, pakai < atau >, bukan ≠.

Yang akan kamu pelajari