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
numbers[10, 20]
divisor0
hasilbelum ada

Penjaga diperiksa lebih dulu: divisor sama dengan nol? Ya.

Langkah 1 dari 2
numbers [10, 20] dengan divisor 0. Perhatikan loop tidak pernah dibuka sama sekali.

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.