Menolak lebih dulu, baru menghitung
Memeriksa yang mustahil di baris terdepan membuat sisa kodenya berhenti perlu waspada.
Sebaiknya baca lebih dulu: Benar, salah, dan gabungannya.
Ada pertanyaan yang tidak punya jawaban
Karena itu pembagi nol wajib ditolak, bukan dihitung lalu diperbaiki. Dan tempat menolaknya menentukan seberapa rumit sisa kodenya.
Dua tempat memeriksa
Diperiksa di dalam loop
SET hasil = [] FOR EACH angka IN numbers IF divisor != 0 SET hasil = hasil + [angka / divisor] END END OUTPUT hasil
Diperiksa sekali di depan
IF divisor == 0 OUTPUT [] END SET hasil = [] FOR EACH angka IN numbers SET hasil = hasil + [angka / divisor] END OUTPUT hasil
Keduanya menghasilkan jawaban yang sama, tetapi kolom kiri memeriksa divisor sekali per elemen padahal nilainya tidak pernah berubah di dalam loop. Yang lebih penting: di kolom kiri, badan loop tetap harus dibaca sebagai kode yang mungkin dilewati, sedangkan di kolom kanan barisnya sudah pasti berjalan.
IngatKlausa penjaga adalah pemeriksaan yang keluar lebih awal di baris terdepan. Setelah ia lewat, sisa kodenya berhak menganggap keadaannya sudah aman.
Nama polanya klausa penjaga. Bentuknya selalu sama: periksa keadaan yang tidak dapat diproses, keluar segera, lalu tulis jalur normalnya tanpa satu pun tingkat bersarang. Yang didapat bukan hanya kode lebih pendek, melainkan kode yang jalur utamanya rata dan dapat dibaca dari atas ke bawah.
Melihat penjaga bekerja
IF divisor == 0 OUTPUT [] END SET hasil = [] FOR EACH angka IN numbers SET hasil = hasil + [angka / divisor] END OUTPUT hasil
Penjaga diperiksa lebih dulu: divisor sama dengan nol? Ya.
Keluarannya array kosong, bukan kegagalan. Ini keputusan tentang arti, bukan tentang teknik: pertanyaan "berapa hasil pembagian setiap angka" pada pembagi nol paling jujur dijawab "tidak ada satu pun hasil". Array masukan yang memang kosong juga menghasilkan array kosong, dan keduanya konsisten.
Periksa pemahaman
numbers berisi [8, 4] dan divisor bernilai 2. Berapa kali klausa penjaga dijalankan pada bentuk yang benar?
Ringkasan
- Pembagi nol tidak punya jawaban, jadi ditolak lebih dulu alih alih dihitung lalu ditambal.
- Periksa nilai yang tidak berubah di luar loop, bukan di dalamnya.
- Setelah penjaga lewat, sisa kodenya berhak menganggap keadaannya aman, dan itu yang membuatnya rata.
- Array kosong adalah jawaban yang sah, bukan tanda kegagalan.
- Masukan kosong dan pembagi nol sebaiknya menghasilkan bentuk keluaran yang sama.