Saya menemukan hardcoding (sic) "" setiap waktu untuk memeriksa string kosong tidak sebagus.
Pendekatan kode bersih
Melakukan ini: foo == ""
adalah praktik yang sangat buruk. ""
adalah nilai magis. Anda tidak boleh mengecek nilai magis (lebih dikenal sebagai angka ajaib )
Yang harus Anda lakukan adalah membandingkan dengan nama variabel deskriptif.
Nama variabel deskriptif
Orang mungkin berpikir bahwa "empty_string" adalah nama variabel deskriptif. Bukan itu .
Sebelum Anda pergi dan melakukan empty_string = ""
dan berpikir Anda memiliki nama variabel yang bagus untuk dibandingkan. Ini bukan apa yang dimaksud dengan "nama variabel deskriptif".
Nama variabel deskriptif yang baik didasarkan pada konteksnya. Anda harus berpikir tentang apa string kosong itu .
- Dari mana asalnya.
- Kenapa disana?
- Mengapa Anda perlu memeriksanya.
Contoh bidang formulir sederhana
Anda sedang membangun formulir di mana pengguna dapat memasukkan nilai. Anda ingin memeriksa apakah pengguna menulis sesuatu atau tidak.
Nama variabel yang baik mungkin not_filled_in
Ini membuat kode sangat mudah dibaca
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Contoh parsing CSV menyeluruh
Anda mem-parsing file CSV dan ingin string kosong diuraikan sebagai None
(Karena CSV sepenuhnya berbasis teks, ia tidak dapat mewakili None
tanpa menggunakan kata kunci yang ditentukan sebelumnya)
Nama variabel yang baik mungkin CSV_NONE
Ini membuat kode mudah diubah dan diadaptasi jika Anda memiliki file CSV baru yang mewakili None
dengan string lain selain""
if csvfield == CSV_NONE:
csvfield = None
Tidak ada pertanyaan tentang apakah kode ini benar. Cukup jelas bahwa ia melakukan apa yang seharusnya dilakukan.
Bandingkan ini dengan
if csvfield == EMPTY_STRING:
csvfield = None
Pertanyaan pertama di sini adalah, Mengapa senar kosong pantas mendapat perlakuan khusus?
Ini akan memberi tahu coders masa depan bahwa string kosong harus selalu dianggap sebagai None
.
Ini karena menggabungkan logika bisnis (Nilai CSV apa yang seharusnya None
) dengan implementasi kode (Apa yang sebenarnya kita bandingkan)
Perlu ada pemisahan kekhawatiran di antara keduanya.
""
tidak sebagus itu?