Açık elseblok
Tüm ifadeleri kapsayan bir battaniye ifadesi olarak buna katılmıyorum, ifancak elsealışkanlık dışı bir blok eklemek iyi bir şeydir.
ifAklıma göre bir açıklama aslında iki farklı işlevi kapsar.
Bir şey yapmamız gerekiyorsa, burada yap.
Bu gibi şeyler tabii ki yok değil bir ihtiyaç elseparçasını.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
ve bazı durumlarda bir elseyanıltıcı madde eklemek konusunda ısrar ediyorlar.
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
olduğu değil aynı
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
işlevsel olarak aynı olmasına rağmen. İlkini ifboş elsebırakmak, gereksiz yere çirkin olan ikinci sonuca götürebilir.
Belirli bir durumu kontrol ediyorsak, sadece bu olayı ele elsealmanızı hatırlatmak için boş eklemek iyi bir fikirdir.
// Count wins/losses.
if (doors[firstChoice] == Prize.Car) {
// We would have won without switching!
winWhenNotSwitched += 1;
} else {
// We win if we switched to the car!
if (doors[secondChoice] == Prize.Car) {
// We picked right!
winWhenSwitched += 1;
} else {
// Bad choice.
lost += 1;
}
}
Bu kuralların yalnızca yeni kod yazarken geçerli olduğunu unutmayın . IMHO Boş elsemaddeler, check-in işleminden önce kaldırılmalıdır.
Deney içintrue değil,false
Yine, bu genel düzeyde iyi bir tavsiyedir ancak çoğu durumda kodu gereksiz yere karmaşık hale getirir ve daha az okunabilir hale getirir.
Gibi kod gibi
if(!customer.canBuyAlcohol()) {
// ...
}
okuyucuya engel oluyor
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
En azından daha kötüsü yoksa kötüdür.
Ben yıllar önce BCPL içinde kodlanmış ve bu dilde bir orada IFhüküm ve bir UNLESSçok daha okunabilecek şekilde kod böylece fıkra:
unless(customer.canBuyAlcohol()) {
// ...
}
Bu önemli ölçüde daha iyi, ama yine de mükemmel değil.
Benim kişisel süreç
Genel olarak, yeni bir kod yazarken, bu olayı henüz henüz kapsamadığımı hatırlatmak elseiçin sık sık boş bir blok ekleyeceğim if. Bu DFStuzaktan kaçınmama yardımcı oluyor ve kodu gözden geçirdiğimde yapacak daha çok şey olduğunun farkına varmamı sağlıyor. Ancak, genellikle TODOtakip etmek için bir yorum eklerim .
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Genellikle elsekodumda nadiren kullandığımı biliyorum, çünkü kod kokusunu sıklıkla gösterebilir.