else
Bloque explícito
No estoy de acuerdo con esto como una declaración general que cubre todas las if
declaraciones, pero a veces else
es bueno agregar un bloque por hábito.
Una if
declaración, en mi opinión, en realidad cubre dos funciones distintas.
Si se supone que debemos hacer algo, hazlo aquí.
Cosas como esta obviamente no necesitan una else
parte.
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
error podría inducir a error
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
no es lo mismo que
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
a pesar de que es funcionalmente igual. Escribir el primero if
con un vacío else
puede llevarlo al segundo resultado que es innecesariamente feo.
Si buscamos un estado específico, a menudo es una buena idea agregar un espacio vacío else
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 solo se aplican cuando escribe un código nuevo . En mi humilde opinión las else
cláusulas vacías deben eliminarse antes de registrarse.
Prueba para true
, no parafalse
Nuevamente, este es un buen consejo a nivel general, pero en muchos casos esto hace que el código sea innecesariamente complejo y menos legible.
Aunque el código como
if(!customer.canBuyAlcohol()) {
// ...
}
es discordante para el lector, pero lo hace
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 IF
cláusula y una UNLESS
cláusula para que pueda codificar de manera mucho más legible como:
unless(customer.canBuyAlcohol()) {
// ...
}
que es significativamente mejor, pero aún no es perfecto.
Mi proceso personal
En general, cuando escribo un código nuevo , a menudo agrego un else
bloque vacío a una if
declaración solo para recordarme que aún no he cubierto esa eventualidad. Esto me ayuda a evitar la DFS
trampa y asegura que cuando reviso el código, noto que hay más por hacer. Sin embargo, generalmente agrego un TODO
comentario para realizar un seguimiento.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Encuentro que generalmente uso else
raramente en mi código, ya que a menudo puede indicar un olor a código.