Pekan lalu, kami memiliki argumen panas tentang penanganan null di lapisan layanan aplikasi kami. Pertanyaannya adalah dalam konteks .NET, tetapi akan sama di Jawa dan banyak teknologi lainnya.
Pertanyaannya adalah: apakah Anda harus selalu memeriksa nol dan membuat kode Anda berfungsi apa pun, atau membiarkan pengecualian muncul ketika nol diterima secara tak terduga?
Di satu sisi, memeriksa nol di mana Anda tidak mengharapkannya (yaitu tidak memiliki antarmuka pengguna untuk menanganinya), menurut pendapat saya, sama dengan menulis blok percobaan dengan tangkapan kosong. Anda hanya menyembunyikan kesalahan. Kesalahan mungkin karena ada sesuatu yang berubah dalam kode dan null sekarang merupakan nilai yang diharapkan, atau ada beberapa kesalahan lain dan ID yang salah diteruskan ke metode.
Di sisi lain, memeriksa nol mungkin merupakan kebiasaan yang baik secara umum. Terlebih lagi, jika ada pemeriksaan, aplikasi dapat berfungsi, hanya sebagian kecil dari fungsi yang tidak memiliki efek apa pun. Kemudian pelanggan mungkin melaporkan bug kecil seperti "tidak dapat menghapus komentar" bukannya bug yang lebih parah seperti "tidak dapat membuka halaman X".
Latihan apa yang Anda ikuti dan apa argumen Anda untuk atau menentang salah satu pendekatan?
Memperbarui:
Saya ingin menambahkan beberapa detail tentang kasus khusus kami. Kami mengambil beberapa objek dari database dan melakukan beberapa pemrosesan pada mereka (katakanlah, buat koleksi). Pengembang yang menulis kode tidak mengantisipasi bahwa objek tersebut bisa nol sehingga ia tidak menyertakan pemeriksaan, dan ketika halaman dimuat ada kesalahan dan seluruh halaman tidak memuat.
Jelas, dalam hal ini seharusnya ada cek. Lalu kami masuk ke argumen tentang apakah setiap objek yang diproses harus diperiksa, bahkan jika itu tidak diharapkan akan hilang, dan apakah proses akhirnya harus dibatalkan secara diam-diam.
Manfaat hipotetis adalah bahwa halaman akan terus berfungsi. Pikirkan hasil pencarian di Stack Exchange di berbagai grup (pengguna, komentar, pertanyaan). Metode ini dapat memeriksa nol dan membatalkan pemrosesan pengguna (yang karena bug adalah nol) tetapi mengembalikan bagian "komentar" dan "pertanyaan". Halaman akan terus berfungsi kecuali bahwa bagian "pengguna" akan hilang (yang merupakan bug). Haruskah kita gagal lebih awal dan menghancurkan seluruh halaman atau terus bekerja dan menunggu seseorang memperhatikan bahwa bagian "pengguna" tidak ada?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");