elseBloque explícito
No estoy de acuerdo con esto como una declaración general que cubre todas las ifdeclaraciones, pero a veces elsees bueno agregar un bloque por hábito.
Una ifdeclaració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 elseparte.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
y en algunos casos insistir en agregar un elseerror 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 ifcon un vacío elsepuede 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 elsesolo 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 elseclá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 IFcláusula y una UNLESSclá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 elsebloque vacío a una ifdeclaración solo para recordarme que aún no he cubierto esa eventualidad. Esto me ayuda a evitar la DFStrampa y asegura que cuando reviso el código, noto que hay más por hacer. Sin embargo, generalmente agrego un TODOcomentario para realizar un seguimiento.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Encuentro que generalmente uso elseraramente en mi código, ya que a menudo puede indicar un olor a código.