Saya baru di Ruby dan saya terkejut ketika saya mengetahui bahwa semua objek benar selain nil dan salah. Bahkan 0 adalah benar.
Yang menyenangkan tentang properti bahasa itu adalah Anda dapat menulis:
if !variable
# do stuff when variable is nil
end
Rekan-rekan saya, yang lebih berpengalaman sebagai pengembang Ruby, bersikeras saya harus memilih itu daripada menggunakan .nil? seperti itu:
if variable.nil?
# do stuff when variable is nil
end
Namun saya percaya bahwa yang terakhir adalah pilihan yang lebih baik karena dua alasan: 1. Saya pikir itu lebih berorientasi objek, terutama dalam bahasa seperti Ruby di mana semuanya adalah objek dan pertukaran pesan. 2. Ini lebih mudah dibaca, menurut pendapat subjek saya, bahkan jika itu kurang kompak.
Apakah saya membuat kesalahan "pemula" di sini?
coding-style
ruby
null
Javier Holguera
sumber
sumber
Jawaban:
Tulis apa yang Anda maksud. Berarti apa yang Anda tulis.
Mari kita ambil tes yang berbeda.
.vowel?
vs.
Sekarang, sudah jelas bahwa ini tidak melakukan hal yang sama. Tapi jika Anda hanya mengharapkan
char
untuk menjadia
ataub
ia akan bekerja. Tapi itu akan membingungkan pengembang berikutnya - blok kedua akan dimasukkan ke dalam kondisi di mana char[eiou]
juga. Tetapi untuka
, itu akan bekerja dengan benar.Ya, inilah masalahnya
nil
danfalse
merupakan satu-satunya nilai falsy di Ruby. Namun, jika Anda mengujinil
dengan mengujinil || false
, ini bukan yang Anda maksud.Ini berarti bahwa pengembang berikutnya (yang kebetulan adalah pembunuh kapak gila yang mengetahui alamat rumah Anda) akan membaca kode, dan bertanya-tanya mengapa
false
harus masuk ke sana juga.Menulis kode yang menyampaikan persis apa yang Anda maksud.
sumber
Pertimbangkan yang berikut ini:
response = responses.to_a.first
Ini akan mengembalikan elemen pertama
responses
, ataunil
. Kemudian karena pernyataan bersyarat berlakunil
seperti yangfalse
dapat kita tulis:Yang lebih mudah dibaca daripada:
The
if (object)
Pola ini sangat umum dalam kode Ruby. Ini juga mengarah dengan baik ke refactoring, misalnya:Ingat juga bahwa metode Ruby kembali
nil
secara default. Begitu:dapat disederhanakan untuk:
Jadi kami dapat melanjutkan refactor:
Sekarang Anda dapat berpendapat bahwa kembali
nil
tidak selalu merupakan ide terbaik, karena itu berarti memeriksa dinil
mana - mana. Tapi itu adalah ketel ikan. Mengingat bahwa pengujian untuk objek "ada atau tidaknya" adalah persyaratan yang sering, kebenaran objek adalah aspek yang berguna dari Ruby, meskipun mengejutkan bagi pendatang baru ke bahasa.sumber
Tidak hanya
if variable.nil?
dibaca lebih seperti bahasa alami, itu juga melindungi terhadap seorang programmer yang secara tidak sengaja memberikanfalse
nilai dan jatuh ke dalamif
pernyataan Anda , karena Ruby adalah bahasa yang diketik secara longgar.sumber
Secara idiomatis,
unless variable
lebih disukai daripadaif !variable
.if
Pernyataan yang dinegasikan sering dianggap sebagai bau kode karena lebih mudah untuk melewatkan negasi ketika membaca sekilas.Gambaran yang lebih besar di sini adalah melakukan
nil
pengecekan seperti ini juga sedikit bau kode. Untuk OO yang tepat, bertujuan untuk menggunakan pola objek nol sehingga pemeriksaan semacam ini tidak pernah diperlukan. http://devblog.avdi.org/2011/05/30/null-objects-and-falsiness/Katakan objek apa yang harus dilakukan, jangan tanya mereka apa itu. Ini kadang-kadang dikenal sebagai kirim jangan tanya
sumber