2009-05-15 17 views
18

¿Está bien usar operadores condicionales como una declaración como tal?Operadores condicionales en Javascript

(x == y) ? alert("yo!") : alert("meh!"); 

¿O es más correcto usarlo para asignar un valor como ese?

z = (x == y) ? "yo!" : "meh!"; 

Si no es incorrecto utilizar como una declaración, a continuación, es posible añadir más de una línea de código para su ejecución como tal? ¿Es más correcto usar ifthen y cambiar las declaraciones de varias líneas de código?

(x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document.write("blah!")); 
+0

La sintaxis existe por una razón: está bien. – Cerebrus

+0

sé lo suficiente como para saber que hay una manera eficiente o más adecuada de hacer las cosas. ¡simplemente no sé lo que son la mayoría del tiempo! gracias a todos por darme la bienvenida! por lo tanto, los operadores condicionales y las declaraciones múltiples probablemente no se mezclen. lo tengo. – baokhangluu

Respuesta

25

operadores condicionales son intencionalmente breve y especialmente útil para las asignaciones:

var a = x ? 1 : 2; 

Su uso de funciones ejecutar de forma condicional, aunque es posible, debería, en aras de la legibilidad puede hacer usando IF/ELSE:

// This is possible but IMO not best practice: 
X ? doSomething() : doSomethingElse(); 

Mientras largo aliento, la mayoría de las veces, esta es la mejor solución:

if (X) { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 

Un beneficio notable de la estructura IF/ELSE es que puede agregar tareas adicionales bajo cada condición con una molestia mínima.

Su último fragmento también es posible, pero parece un poco largo y, de nuevo, podría ser más adecuado para una estructura lógica más convencional; como un bloque IF/ELSE.

Dicho esto, un operador condicional todavía puede ser legible, p.

(something && somethingElse > 2) ? 
    doSomeLongFunctionName() 
    : doSomeOtherLongFunctionName(); 

Al final, como muchas cosas, es una preferencia personal. Recuerde siempre que el código que está escribiendo no es solo para usted; otros desarrolladores podrían tener que vadearlo en el futuro; intenta hacerlo lo más legible posible.

2

Cualquiera de los dos métodos son aceptables aunque se podría también haber escrito:

alert((x == y) ? "yo!" : "meh!"); 

Aparte de que yo nunca recomendaría el uso de una línea condicional de declaraciones de varias líneas, sólo tiene que utilizar un estándar if/else bloquear. Dado que la sintaxis que ingresó tampoco es JS válida, podría haber colocado los enunciados múltiples en métodos anónimos y yada yada, entonces usted entra en un lío enredado de código casi inmanejable e innecesariamente difícil. De nuevo, estándar if/else.

+0

gracias! No estaba pensando en cómo optimizarlo, pero eso es genial. todavía necesito dejar que se hunda para que puedan usarse dentro de expresiones. – baokhangluu

4

JavaScript no impedirá que lo haga, pero es una práctica poco común que confundirá a cualquiera que lea su código.

El operador condicional se usa casi siempre para seleccionar dos valores alternativos, no declaraciones. Se prefiere una declaración if para la bifurcación condicional de sentencias.

En cuanto a su última pregunta, sí, si realmente debe, se puede abusar de la construcción []:

(x == y) ? [alert("yo!"), document.write("woot!")] : otherstuff(); 

Pero por favor, no lo haga. 8-)

4

Depende totalmente de usted, puede hacerlo de cualquier manera. Sin embargo, solo tiene que preguntarse si este estilo sigue las pautas de la compañía y qué tan legible quiere que sea este código.

El uso de sentencias if es mucho más legible.

Personalmente, solo utilizo el operador ternario para condiciones verdaderas/falsas simples y rápidas, donde hacerlo tiene sentido o cuando necesito algo "en línea".

2

Estoy de acuerdo con Chris y J-P que:

  1. operadores condicionales son útiles para breves declaraciones. La asignación de variables de J-P es un gran ejemplo: var a = x ? 1 : 2;
  2. Las cláusulas de instrucciones múltiples deben separarse en líneas separadas para su legibilidad.
  3. Los operadores condicionales se pueden hacer legibles como sentencias de línea múltiple con la sangría correcta, pero la sintaxis if/else es mucho más familiar para la mayoría de los desarrolladores. La legibilidad consiste en coincidir con las expectativas de su lector, por lo que la familiaridad es importante.

Agregaré que los operadores condicional multilínea lo dejan abierto a errores de inserción de punto y coma. Consulte el JSLint documentation (consulte la sección sobre "Breaking Line") para obtener más información al respecto. Si debe usar un operador condicional multilínea, asegúrese de que los operadores estén al final de cada línea. Yo se entrega por ejemplo, de varias líneas de J-P así:

(something && somethingElse > 2) ? 
    doSomeLongFunctionName() : 
    doSomeOtherLongFunctionName(); 

Como se ha mencionado, hay muchas guías de estilo por ahí y se puede elegir lo que prefiera. Sin embargo, algunas opciones son más propensas a errores que otras. Definitivamente échale un vistazo a eso JSLint documentation; es una guía de estilo muy bien pensada, y si se adhiere a ella, incluso puede usar la herramienta JSLint para verificar automáticamente si hay algún problema potencial en su código.