Los atajos de idioma a menudo se pueden usar para hacer que el código sea más conciso.
Por ejemplo, los operadores de fusión ternarios y nulos pueden reducir la cantidad de código, pero posiblemente en detrimento de la legibilidad:
Cía#:
Person newGuy = new Person();
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
} else {
newGuy.Boss = boss;
}
es funcionalmente equivalente a:
Person newGuy = new Person();
newGuy.Boss = boss ?? GetDefaultBoss();
pero obviamente mucho más detallado.
¿Dónde trazas la línea cuando se trata de concisión versus legibilidad?
code-quality
readability
Damovisa
fuente
fuente
Respuestas:
Ambos.
Su primer ejemplo es ciertamente más detallado y posiblemente más explícito ... pero también requiere que escanee cinco líneas en lugar de una. Peor aún, enfatiza su propósito: asignar un valor a
newGuy.Boss
.Su segundo ejemplo puede costarme un segundo si no estoy familiarizado con el operador de fusión nula, pero no puede haber ninguna duda sobre su propósito, y si estoy escaneando una rutina más grande buscando la fuente de un valor, lo hará será mucho más fácil para mí elegir este.
Ahora, contrasta esto:
...con:
El último ejemplo es nuevamente mucho más corto, pero ahora oscurece su propósito al hacer que las tareas desencadenadas por la misma prueba parezcan distintas. Aquí, siento que la verbosidad del primero está justificada.
fuente
boss
3 veces en lugar de solo una vez en el ejemplo detallado. Esta es solo otra razón por la cual un código más corto solo por ser más corto es una mala idea. Creo que la concisión debe ser el segundo objetivo principal, ya sea legibilidad / mantenibilidad (para código complejo) o rendimiento (para secciones críticas de bucles internos, etc.). En otras palabras, nunca optimice únicamente por concisión, a menos que planee enviar su código a través de una conexión de 1bps;)Si bien ambos son buenos objetivos, siempre apoyaré la legibilidad cuando me vean obligado a elegir uno.
Yo diría que su ejemplo mejora tanto la legibilidad como la brevedad. Considere, sin embargo:
Opuesto a
Este último es conciso, pero es difícil de leer. El primero es detallado, pero el flujo de la lógica es clara.
En definitiva, la brevedad no sirve para un gran propósito, aparte de la capacidad de caber más en la pantalla. La legibilidad facilita la depuración, por lo que generalmente debería preferirse.
fuente
?? whatever.something
.Yo diría que, como regla general, nunca sacrifique la legibilidad debido a la concisión, pero nunca juzgue la legibilidad basada en la falta de conocimiento de otros programadores sobre ese tema.
La concisión y la legibilidad no son opuestos. Al igual que esta respuesta, a veces más corto es más legible.
fuente
??
significa, si lo uso y luego lo aprenden, ambos nos hemos beneficiado. Y no es difícil escribir "operador" en msdn.comDiría que prefiero la legibilidad, aunque eso a veces significa usar un código conciso. (Es decir, para condicionales relativamente simples dentro de un bloque condicional más grande).
Básicamente, si es innecesariamente difícil de entender, no lo hagas.
fuente
La legibilidad viene primero donde entra en conflicto con la concisión, porque el código se modifica con más frecuencia de lo que se escribe inicialmente. Por otra parte:
El ruido sintáctico y el código repetitivo a menudo oscurecen las intenciones y, por lo tanto, perjudican la legibilidad. A veces, el código más conciso también es más legible. Por ejemplo, piense en funciones lambda o delegados / funciones de primera clase versus clases de método único que implementan una interfaz de método único.
La legibilidad debe evaluarse en función de lo fácil que es leer el código para un programador con experiencia razonable que conoce el lenguaje y sus características únicas / avanzadas bastante bien, no un mono de código apenas competente que solo conoce el mínimo común denominador.
fuente
Un aspecto que no creo que se haya mencionado todavía: ¿cuáles son sus objetivos?
Si lo único que le importa es la seguridad laboral, busque concisión y compacidad sobre todo lo demás. Omita también comentar su código.
Si desea poder entregar fácilmente su código a otra persona mientras trabaja en un nuevo proyecto genial, busque legibilidad, claridad y muchos comentarios sólidos.
Nota: lo anterior no se trata de usted personalmente, @Damovisa; Es para cualquiera que elija entre las dos posiciones.
fuente
Hay una cosa que la versión detallada tiene como ventaja.
Tiene más líneas, y la mayoría de los depuradores están orientados a líneas . Es muy difícil establecer un punto de interrupción en el medio de una expresión, pero generalmente es trivialmente simple establecerlo dentro de una instrucción de bloque.
En otras palabras, ¿cuál le gustaría ver en su editor si desea que su depurador se active cuando
boss == null
?(Dicho esto, me gusta el operador ??)
fuente
La legibilidad debe ser lo primero, a largo plazo la mayoría de las personas pasan la mayor parte del tiempo modificando o extendiendo el código existente; la legibilidad es una gran parte de la mantenibilidad.
Dicho esto, la concisión es algo que puede contribuir a la legibilidad. Por ejemplo, en su pregunta, el segundo fragmento es más legible y más conciso.
fuente