Açık else
blok
Tüm ifadeleri kapsayan bir battaniye ifadesi olarak buna katılmıyorum, if
ancak else
alışkanlık dışı bir blok eklemek iyi bir şeydir.
if
Aklı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ç else
parçasını.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
ve bazı durumlarda bir else
yanı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 if
boş else
bırakmak, gereksiz yere çirkin olan ikinci sonuca götürebilir.
Belirli bir durumu kontrol ediyorsak, sadece bu olayı ele else
almanı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ş else
maddeler, 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 IF
hü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 else
için sık sık boş bir blok ekleyeceğim if
. Bu DFS
tuzaktan 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 TODO
takip etmek için bir yorum eklerim .
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Genellikle else
kodumda nadiren kullandığımı biliyorum, çünkü kod kokusunu sıklıkla gösterebilir.