¿Debería usarse el operador ternario fuera de las declaraciones de asignación?

9

Editar No se trata de si el operador ternario es o no dañino . Se trata de si existe o no un consenso sobre si se debe usar o no fuera de las declaraciones de asignación. /Editar

Basado en un booleano, quiero llamar a una de dos funciones diferentes (sin valor de retorno). Escribí este bit de javascript:

(condition) ? doThis(arg) : doThat(arg)

Lo que creo que se ve más limpio que escribir una declaración if-else:

if(condition) {
    doThis(arg);
}
else {
    doThat(arg);
}

Mis colegas creen firmemente que las declaraciones ternarias solo deben usarse en las declaraciones de asignación. No puedo encontrar guías de estilo que analicen esto, probablemente porque lenguajes como Java y C # no permiten esto en absoluto (sus compiladores requieren operadores ternarios para devolver un valor). ¿Debería considerarse esto un mal uso de la declaración ternaria? ¿Por qué?

BobbyA
fuente
Tenga en cuenta que a Jason Voorhees se le puede asignar mantener ese código suyo.
David Hammen
2
@gnat: no es un duplicado de esa pregunta, que se trata del uso general de?: en expresiones, mientras que esto se trata específicamente de usarlo como un reemplazo para if-else cuando no se calcula un valor único.
Julio
Si bien tengo dudas sobre la idoneidad del duplicado propuesto, esta pregunta todavía se basa principalmente en la opinión, por lo que no veo ningún punto en volver a abrirla.
Ixrec
¿Por qué crees que esto se ve más limpio? Romper convenciones como esta es lo contrario de limpio.
JacquesB

Respuestas:

10

En términos generales, el operador condicional está destinado a hacer una declaración if con un valor . w = x ? y : z. Por lo tanto, si lo está utilizando para efectos secundarios, es contra-intuitivo. Válido, pero contra-intuitivo; y recuerda que estás escribiendo un código para que lo lean tus compañeros de equipo.

asthasr
fuente
Esto parece correcto Casi todos los ejemplos de uso que encuentro, incluido Wikipedia, utilizan el operador para realizar asignaciones condicionales.
BobbyA
3

Un par de casos, que no son asignaciones, donde encuentro útiles los operadores ternarios son:

En argumentos de función: en mi opinión

f( e1, .. cond ? em : dm, .. en);

es menos propenso a errores que

if ( cond) f( e1, .. em, .. en); else f( e1, .. dm, .. en);

Cuando quieres llamar a una función u otra con argumentos idénticos: nuevamente encuentro

(cond ? f : g)( /* long and complex argument list */);

menos propenso a errores que

if ( cond) f( /* long and complex argument list */);
else g( /* long and complex argument list */);

Como lo veo, la clave en cada caso es que el? la forma tiene menos repetición. La repetición abre la posibilidad de cambiar una instancia y olvidarse de cambiar la otra.

dmuir
fuente
55
Sin embargo, en estos casos, todavía está utilizando el operador ternario para devolver un valor que, según la respuesta anterior de syrion, es un uso esperado.
BobbyA
@BobbyA ¿qué pasa con las funciones nulas?
favor el