Bloque else
explícito
No estoy de acuerdo con esto como una declaración general que cubre todas las declaraciones if
pero hay ocasiones en que agregar un bloque else
por costumbre es una buena cosa.
En mi opinión, una declaración if
cubre dos funciones distintas.
Si se supone que debemos hacer algo, hazlo aquí.
Cosas como esta obviamente no necesitan una parte else
.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
y en algunos casos, insistir en agregar un else
podría inducir a error.
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
es no lo mismo que
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
aunque sea funcionalmente igual. Escribir el primer if
con un else
vacío puede llevarte al segundo resultado que es innecesariamente feo.
Si estamos comprobando un estado específico, a menudo es una buena idea agregar un else
vacío solo para recordarle que cubra esa eventualidad
// 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;
}
}
Recuerde que estas reglas se aplican solo cuando está escribiendo un nuevo código . En mi humilde opinión, las cláusulas else
vacías deben eliminarse antes del registro.
Prueba para true
, no para false
Nuevamente, este es un buen consejo a nivel general, pero en muchos casos hace que el código sea innecesariamente complejo y menos legible.
A pesar de que el código como
if(!customer.canBuyAlcohol()) {
// ...
}
es discordante para el lector, pero al hacerlo
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
es al menos tan malo, si no peor.
Codifiqué en BCPL hace muchos años y en ese idioma hay una cláusula IF
y una cláusula UNLESS
para que puedas codificar mucho más fácilmente que:
unless(customer.canBuyAlcohol()) {
// ...
}
que es significativamente mejor, pero aún no es perfecto.
Mi proceso personal
En general, cuando escribo el código nuevo a menudo agrego un bloque else
vacío a una declaración if
solo para recordarme que aún no he cubierto esa eventualidad. Esto me ayuda a evitar la captura DFS
y asegura que cuando reviso el código, me doy cuenta de que hay más por hacer. Sin embargo, generalmente agrego un comentario TODO
para realizar un seguimiento.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Encuentro que generalmente uso else
rara vez en mi código ya que a menudo puede indicar un olor de código.