No suelen ser intercambiables. Considera lo siguiente.
si (a) {
corre en circulos();
}
de lo contrario si (b) {
Gritar y chillar();
}
más {
do_the_hokey_pokey ();
}
¿Cómo podemos escribir eso sin el “más si”? Aquí hay un intento.
- ¿Cuáles son las opciones para un ingeniero de software de TI después de hacer un MBA?
- Cómo aprender rápidamente a convertirse en un ingeniero de software senior con experiencia limitada
- Un ingeniero de software se casa con un ingeniero de software. ¿Cómo serían sus vidas?
- ¿Son iguales los ingenieros de software de Amazon y Addepar?
- ¿Cuáles son las habilidades más importantes necesarias para ser un ingeniero de software exitoso?
si (a) {
corre en circulos();
}
más {
si (b) {
Gritar y chillar();
}
más {
do_the_hokey_pokey ();
}
}
Esto es realmente una trampa, por supuesto. Todo lo que realmente hemos hecho es poner una “{” en el medio de la construcción “else if”. También hemos puesto controles en el mismo nivel conceptual en diferentes niveles de código, y hemos aumentado el deslizamiento de sangría. En total, es simplemente malo para la legibilidad. Probemos algo más.
si (a) {
corre en circulos();
}
si (! a && b) {
Gritar y chillar();
}
if (! a &&! b) {
do_the_hokey_pokey ();
}
Ya no estamos haciendo trampa, pero UGH . Esto es objetivamente peor que el intento anterior. No solo es más difícil cambiar la lógica sin tener que cambiar el código de varias líneas, sino también si se evalúa aob tiene efectos secundarios, entonces ni siquiera es correcto. (Nota al margen: he trabajado en código donde incluso los accesos adicionales a la memoria fueron un efecto secundario por el que vale la pena preocuparse)
Básicamente, el “más si” va a ser su opción más limpia el 99% del tiempo. El único caso en el que eso no es cierto es cuando el “si” anterior implica un cambio en el flujo de control, de tal manera que no pasa al siguiente. Este es un idioma común.
si (a) {
devolver RUN_IN_CIRCLES;
}
si (b) {
return SCREAM_AND_SHOUT;
}
return DO_THE_HOKEY_POKEY;
Esto es a la vez corto y claro. Es el único caso general en el que sugeriría renunciar al “más si” pero estoy seguro de que también hay casos más específicos. La clave siempre es maximizar la legibilidad y la facilidad de mantenimiento, en lugar de cumplir con una regla estricta.