A veces me encuentro con un código similar al siguiente ejemplo (lo que esta función hace exactamente está fuera del alcance de esta pregunta):
function doSomething(value) {
if (check1(value)) {
return -1;
}
else if (check2(value)) {
return value;
}
else {
return false;
}
}
Como se puede ver, if, else ify elselas declaraciones se utilizan en conjunción con el returncomunicado. Esto parece bastante intuitivo para un observador casual, pero creo que sería más elegante (desde la perspectiva de un desarrollador de software) eliminar los else-s y simplificar el código de esta manera:
function doSomething(value) {
if (check1(value)) {
return -1;
}
if (check2(value)) {
return value;
}
return false;
}
Esto tiene sentido, ya que todo lo que sigue a una returndeclaración (en el mismo ámbito) nunca se ejecutará, haciendo que el código anterior sea semánticamente igual al primer ejemplo.
¿Cuál de los anteriores se ajusta más a las buenas prácticas de codificación? ¿Hay algún inconveniente en cualquiera de los métodos con respecto a la legibilidad del código?
Editar: se ha hecho una sugerencia duplicada con esta pregunta como referencia. Creo que mi pregunta toca un tema diferente, ya que no estoy preguntando por evitar declaraciones duplicadas como se presenta en la otra pregunta. Ambas preguntas buscan reducir las repeticiones, aunque de maneras ligeramente diferentes.
-1es un número, falsees un booleano y valueno se especifica aquí, por lo que podría ser cualquier tipo de objeto.
valueque en realidad sea un número entero. Si puede ser algo, eso es aún peor.
elsees menor, el mayor problema es que obviamente está devolviendo dos tipos de datos de una sola función, lo que hace que la API de la función sea impredecible.