¿Cómo funciona el operador ternario?

Por favor, demuestre cómo funciona el operador ternario con un bloque regular if / else. Ejemplo:

Boolean isValueBig = value > 100 ? true : false; 

Duplicado exacto: ¿Cómo uso el operador ternario?

 Boolean isValueBig = ( value > 100 ) ? true : false; Boolean isValueBig; if( value > 100 ) { isValueBig = true; } else { isValueBig = false; } 

La diferencia entre la operación ternaria y if / else es que la expresión ternaria es una statement que evalúa a un valor, mientras que if / else no lo es.

Para usar su ejemplo, cambiando del uso de una expresión ternaria a if / else, podría usar esta statement:

 Boolean isValueBig = null; if(value > 100) { isValueBig = true } else { isValueBig = false; } 

En este caso, sin embargo, su statement es equivalente a esto:

 Boolean isValueBig = (value > 100); 

Cuando era nuevo en C ++, descubrí que ayudaba a leer esta construcción de la siguiente manera:

 Boolean isValueBig = if condition ? then x else: y; 

(Tenga en cuenta que este no es un código válido. Es justo lo que aprendí a leer en mi cabeza).

 Boolean isValueBig; if (value > 100) { isValueBig = true; } else { isValueBig = false; } 
 Boolean isValueBig; if(value > 100) { isValueBig = true; } else { isValueBig = false; } 

Nunca fui fan del operador ternario porque pensé que era difícil de leer. Como sucede, Jon Skeet y su libro, C # en profundidad finalmente golpearon a este viejo perro en la cabeza y lograron asimilarlo. Jon dijo, y parafraseo, pensar en ello como una pregunta.

valor> 100?

“si no”

Ahora los ciegos pueden ver.

Espero que esto te ayude a ser una segunda naturaleza.

Como se cita en la página ?: Operator MSDN , “el operador condicional (? 🙂 devuelve uno de dos valores según el valor de una expresión booleana”.

Entonces puede usar el operador ternario para devolver algo más que booleanos:

  string result = (value > 100 ) ? "value is big" : "value is small"; 

Ejemplo PHP

  

“La expresión (expr1)? (Expr2): (expr3) se evalúa como expr2 si expr1 se evalúa como VERDADERO , y expr3 si expr1 se evalúa como FALSO .”

Documentación PHP sobre operadores de comparación

Asegúrese de no mezclar tipos en partes verdadero / falso en Java. Produce resultados extraños 🙁

Mal ejemplo, porque podrías escribir fácilmente

 Boolean isValueBig = value > 100 ? true : false; 

como:

 bool isValueBig = value > 100 

Más allá de eso, todos los demás ya lo han respondido. Simplemente no recomendaría el uso de operadores ternarios para establecer valores de bool, ya que lo que está evaluando ya es un valor booleano.

Me doy cuenta de que era solo un ejemplo, pero valía la pena señalarlo.

Otros ya lo han respondido, pero hay una cosa que debes saber sobre el uso de ternary y con eso quiero decir que nunca lo hagas.

Supongamos que tiene un código que se supone que devuelve un objeto diferente para cada variación posible de algún valor, digamos por simpliticy un número entero entre 1 y 5. Su código se ve así:

 if(i==1) { return new ObjectOne(); } else if(i==2) { return new ObjectTwo(); } else if(i==3) { return new ObjectThree(); } else if(i==4) { return new ObjectFour(); } else if(i==5) { return new ObjectFive(); } else { return new DefaultObject(); } 

Es fácil de entender pero un poco pesado. Dado que ternario es solo otra forma de escribir una sentencia if..else que se puede refactorizar a este

 return (i==1) ? new ObjectOne() : (i==2) ? new ObjectTwo() : (i==3) ? new ObjectThree() : (i==4) ? new ObjectFour() : (i==5) ? new ObjectFive() : new DefaultObject(); 

Se llama ternario nested . Es malo, ahora que lo sabes, por favor nunca lo uses. Puede parecer que tiene sus usos como en el caso anterior, pero es muy probable que en situaciones de la vida real necesite usarlo en algún lugar donde pierda legibilidad (piense en modificar las configuraciones con una cantidad variable de parámetros, etc.).

Sector de bonificación: nunca establezca valores de atributo dentro de if (), simplemente mire esto: if(bool=true!=false) { .. }

Según lo citado de MSDN (señalado en una publicación anterior)

string resultado = (valor> 100)? “el valor es grande”: “el valor es pequeño”;

Podría leerse como:

¿Es el valor mayor que 100? En caso afirmativo, el resultado de la cadena es “el valor es grande”; si no, el resultado de la cadena es “el valor es pequeño”.