¿Es mejor usar condiciones if múltiples o una condición if con cláusulas múltiples (si no es así)?

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.

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.

En el nivel del compilador, son lo mismo. Un elseif es realmente el comienzo de otro bloque i f . Una vez compilado, el ejecutable tendrá las mismas ramas en ambos sentidos.

Desde el punto de vista de la elegancia y la legibilidad, prefiero varias declaraciones elseif sobre declaraciones if múltiples y anidadas. Para replicar la lógica de una lista de elseif s, los if s tendrían que estar anidados; lo cual requeriría alguna duplicación también. Si puede encontrar una forma lógica, debe usar una estructura select / case / switch (varía según el idioma) en su lugar.

Bueno, si sabe que solo hay una posibilidad verdadera de múltiples posibilidades, debe usarla con varias cláusulas. De esa manera, cuando su programa encuentre una condición verdadera, simplemente omitirá todo lo demás si las declaraciones sin siquiera verificar.

Si desea verificar cada posibilidad por separado, debe usar múltiples declaraciones if para que su programa verifique cada condición.

Si sus declaraciones son exclusivas entre sí si tienen más de 12. Si puede haber múltiples declaraciones verdaderas, entonces múltiples ifs

Depende de lo que quieras lograr. Con una gran cantidad de sentencias if, debe especificar predicados muy particulares si no desea hacer una sentencia if diferente. En cambio, con un else, si puede tener un general más al final, diferente grado de generalización.

En primer lugar, no es necesario seguir ningún camino en particular. Deberías intentar escribir un código que sea más legible. Y lo segundo es si se sabe que si solo una condición puede ser verdadera a la vez, entonces es mejor usar la escalera if-else ya que ahorrará tiempo para la comprobación innecesaria de todas las condiciones if .

More Interesting

Como nuevo graduado, ¿debería trabajar para Uber, Facebook / Google u otra startup como ingeniero de software? ¿Cómo se compara el talento de ingeniería en Uber con Google / FB y otras startups populares como Dropbox, Pinterest y Airbnb?

¿Cómo obtienen los ingenieros de software autodidactas su primer trabajo remoto?

¿Cuáles son las habilidades, el conocimiento y la experiencia necesarios para ser un gran ingeniero de software de back-end?

¿Debe un buen ingeniero de software pasar a la vía de gestión para el crecimiento, suponiendo que sea igualmente bueno en gestión y programación?

¿Dónde puedo encontrar un ingeniero de software que me aconseje sobre la creación de un programa?

¿Cómo es trabajar en Oracle como ingeniero de software?

¿Cómo es ser ingeniero de software en Singapur?

¿Cuáles son algunos programas que todo programador debe hacer al menos una vez?

¿India necesita un mayor número de ingenieros?

He estado pensando en establecerme en Australia, ¿cuánto es bueno para un ingeniero de software y cuáles son los requisitos previos?

¿Tengo un bajo rendimiento para ser un SDE de Microsoft en el nivel 60 a la edad de 26 años?

¿Cómo pueden llevarse bien los gerentes de producto e ingeniería?

¿Cuándo han rechazado los ingenieros de software un proyecto por razones éticas, especialmente cuando los costos son un factor determinante para bajar los rigurosos estándares de ingeniería?

¿Qué hacen los ingenieros de software en Google X?

¿Cuál es el trabajo más estresante, el analista de seguridad de la información o el ingeniero de software, y por qué?