Waspadai mengorbankan kejelasan sambil mengejar keterbacaan .
Meskipun if (user.ExistsInDatabase(db))
terbaca lebih bagus dari if (user.CheckExistsInDatabase(db))
, pertimbangkan kasus kelas dengan pola pembangun, (atau kelas apa pun yang dapat Anda setel statusnya):
user.WithName("Mike").ExistsInDatabase(db).ExistsInDatabase(db2).Build();
Tidak jelas apakah ExistsInDatabase
memeriksa apakah itu ada, atau mengatur fakta bahwa itu memang ada. Anda tidak akan menulis if (user.Age())
atau if (user.Name())
tanpa nilai perbandingan, jadi mengapa if (user.Exists())
ide bagus murni karena properti / fungsi itu adalah tipe boolean dan Anda dapat mengganti nama fungsi / properti untuk membaca lebih seperti bahasa Inggris alami? Apakah sangat buruk untuk mengikuti pola yang sama yang kita gunakan untuk tipe lain selain boolean?
Dengan tipe lain, sebuah if
pernyataan membandingkan nilai kembalian suatu fungsi dengan nilai dalam kode, sehingga kodenya terlihat seperti:
if (user.GetAge() >= 18) ...
Yang berbunyi sebagai "jika titik pengguna mendapatkan usia lebih besar dari atau sama dengan 18 ..." benar - ini bukan "bahasa Inggris alami", tetapi saya berpendapat bahwa object.verb
tidak pernah menyerupai bahasa Inggris alami dan ini hanyalah aspek dasar dari pemrograman modern (untuk banyak bahasa utama). Pemrogram umumnya tidak memiliki masalah dalam memahami pernyataan di atas, jadi apakah hal berikut ini lebih buruk?
if (user.CheckExists() == true)
Yang biasanya disingkat menjadi
if (user.CheckExists())
Diikuti dengan langkah fatal
if (user.Exists())
Meskipun telah dikatakan bahwa "kode dibaca 10x lebih sering daripada yang ditulis", bug juga sangat penting agar mudah dikenali. Misalkan Anda memiliki fungsi bernama Exists () yang menyebabkan objek ada, dan mengembalikan benar / salah berdasarkan keberhasilan. Anda dapat dengan mudah melihat kode if (user.Exists())
dan tidak menemukan bug - bug tersebut akan jauh lebih jelas jika kode dibaca if (user.SetExists())
misalnya.
Selain itu, user.Exists () dapat dengan mudah berisi kode yang kompleks atau tidak efisien, pergi bolak-balik ke database untuk memeriksa sesuatu. user.CheckExists () memperjelas bahwa fungsi tersebut melakukan sesuatu.
Lihat juga semua tanggapan di sini: Penamaan Konvensi: Apa nama metode yang mengembalikan boolean?
Sebagai catatan terakhir - setelah "Tell Don't Ask", banyak fungsi yang mengembalikan true / false menghilang, dan alih-alih meminta status objek, Anda menyuruhnya melakukan sesuatu, yang dapat dilakukan di tempat lain. cara berdasarkan negaranya.
isBabbyFormed