En algún código que estoy escribiendo ahora, tengo algo como esto:
if (uncommon_condition) {
do_something_simple();
} else {
do();
something();
long();
and();
complicated();
}
Una parte de mí piensa: "Está bien la forma en que está escrito. Los casos simples deberían ir primero y los casos más complicados deberían ir después". Pero otra parte dice: "¡No! El else
código debe ir debajo de if
, porque if
es para tratar casos inusuales y else
es para tratar todos los demás casos". ¿Cuál es correcto o preferible?
coding-style
EMBLEMA
fuente
fuente
Respuestas:
Orden por su probabilidad de ser ejecutado. La (s) condición (es) más común (s), más probable (s) debe ir primero.
La "dificultad de tratar con ellos" debe abordarse mediante la estructura del código, la abstracción, etc. En el ejemplo, el bloque else podría refactorizarse a la llamada a un solo método. Desea que sus
if
cláusulas estén en el mismo nivel abstracto.fuente
not
. Personalmente me concentraría en evitar lasnot
condiciones. Se ha demostrado que inducen una mayor carga cognitiva para comprender que las condiciones "positivas" y son perjudiciales para la legibilidad / comprensión del código. Tiendo a usarlos solo en declaraciones de guardia.doesNotAllowxxFiles = false
. Lo suficientemente malo, pero luego haz estoif(! doesNotAllowxxFiles)
Intenta mejorar la legibilidad. Una forma es colocar el bloque de código más largo en la parte else.
es más legible que
fuente
Ninguna regla fija como tal escuché sobre el uso, pero sigo así
Pero si ambos tienen la misma función con propiedades diferentes, entonces mejor optar por lo inusual primero que lo habitual para que pueda guardar una instrucción.
Para el código de ensamblaje de código anterior será algo como esto:
Si la condición interna es verdadera, entonces el flujo es 1-> 2 (4 instrucciones)
SI la condición interna es falsa, entonces el flujo es 1-> 3 (3 instrucciones)
Por lo tanto, es mejor poner eventos inusuales o que ocurren raramente en una condición parcial y normal en otra cosa para que podamos guardar una instrucción cada vez ;-)
fuente
He descubierto que el patrón opuesto exacto conduce a un código más fácil de leer y reduce o elimina las instrucciones anidadas if. Me refiero a esto como un patrón de "guantelete". (En la narración de cuentos, un guante sería una serie de desafíos que deben cumplirse con éxito antes de que se complete la tarea final). Al manejar sus casos límite primero , permite que el cuerpo principal de su código sea limpio y conciso:
fuente
Para mí, se trata más de las condiciones que de la complejidad del código que ejecutan. Debe ordenar las condiciones para atrapar primero las condiciones inusuales, luego las más comunes después. Además, si el código else es realmente largo y complicado, probablemente haría un sub para eso, para mantener la parte condicional obvia para el lector.
fuente
No tengo una regla fija, pero generalmente sigo esto: primero, considere dónde hay un patrón de diseño perdido que lo tendrá en cuenta. Si no, lo escribo para que la condición en el if sea la más clara. Es decir, evitar los dobles negativos y similares.
fuente
En cuanto a tales escenarios, no hay una regla general para ello. Pero posiblemente podamos seguir para escribir el código positivo o más probable en el bloque if y dejarlo fuera en el bloque else o en los casos predeterminados.
fuente