Haruskah metode boolean selalu mengambil bentuk afirmatif, bahkan ketika mereka hanya akan digunakan dalam bentuk negatif?
Katakanlah saya ingin memeriksa apakah suatu entitas ada sebelum membuat entitas, argumen saya adalah bahwa bentuk pertama di bawah ini lebih baik daripada bentuk kedua, apakah metode tersebut pernah digunakan dalam bentuk afirmatif atau tidak.
Singkatnya, saya menemukan if(!affirmative)
lebih mudah dibaca daripada if(negative)
. Saya punya rekan yang tidak setuju, pikir?
Bentuk pertama:
int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);
Bentuk kedua:
int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);
if (not entity_exists(entity_id))
!
karakter berkali-kali menyebabkan saya salah mengerti kode sampai saya membacanya lagi. Jadi saya mungkin lebih setuju dengan rekan kerja Anda. Saya suka formulir yang bernilai true saat Anda memeriksanya.if (!exists) create()
dapat dilihat sebagai praktik buruk dalam banyak bahasa / kerangka kerja, karena cenderung tidak aman. Biasanya, pendekatan yang disukai adalah memanggilcreate()
dan menangani pengecualian khusus atau mengembalikan kode yang mengatakan bahwa entitas sudah ada. Ini tentu saja bukan jawaban untuk pertanyaan yang sebenarnya (itulah sebabnya ini hanya komentar).Jawaban:
Membuat aturan tentang hal-hal seperti itu tampaknya sedikit banyak - saya tidak ingin melihat pedoman dalam dokumen standar pengkodean yang mengatakan bahwa Anda tidak boleh menggunakan nama negatif untuk properti boolean . Tetapi sebagai masalah gaya pribadi, saya pikir berusaha untuk menjaga nama tetap positif bisa menjadi cita-cita yang bagus. Namun, saya pikir itu juga baik untuk menghindari kebutuhan untuk yang kurus dan mudah terjawab
!
. Orang sering dapat menemukan cara untuk mengubah nama negatif menjadi nama positif:accountHasCharges
accountIsClear
(sama seperti!accountHasCharges
)Kejelasan adalah pertimbangan yang paling penting, dan alasan yang baik untuk menghindari nama metode negatif adalah bahwa mereka dapat menyebabkan dua kali lipat negatif atau lebih buruk:
isComplete
// baikisNotComplete
//! IsComplete biasanya lebih baikisIncomplete
// bisa masuk akal jika 'tidak lengkap' adalah keadaan objek yang diketahui!isNotComplete
// mengerikan!isNotComplete == 0
// dapat menyebabkan liburan permanensumber
!isNotIncomplete
entity_exists
menjadientity_should_be_created
(bukanentity_not_exists
)? Atau mungkinentity_missing
sesuai saran Dan?Saya setuju bahwa afirmatif lebih mudah dibaca. Anda mungkin mencoba
Bentuk ketiga
atau
Formulir Keempat
sumber
Ini juga tergantung pada bagaimana metode Anda akan digunakan. Jika itu akan digunakan dalam kasus afirmatif dan negatif, misalnya
Maka nama metode harus dalam afirmatif, seperti di atas. Jika Anda tidak yakin bagaimana ini akan digunakan, maka pertahankan di atas.
Tetapi jika itu HANYA digunakan dalam kasus negatif, maka yang berikut ini dapat diterima (bahkan mungkin diinginkan)
atau bahkan lebih baik reword untuk lebih afirmatif
sumber