c# - unario - ¿Cómo funciona el operador ternario?
operador unario c# (12)
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";
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?
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).
La diferencia entre la operación ternaria y if / else es que la expresión ternaria es una declaración 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 declaración:
Boolean isValueBig = null;
if(value > 100)
{
isValueBig = true
}
else
{
isValueBig = false;
}
En este caso, sin embargo, su declaración es equivalente a esto:
Boolean isValueBig = (value > 100);
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.
Ejemplo PHP
<?php
// Example usage for: Ternary Operator
$action = (empty($_POST[''action''])) ? ''default'' : $_POST[''action''];
// The above is identical to this if/else statement
if (empty($_POST[''action''])) {
$action = ''default'';
} else {
$action = $_POST[''action''];
}
?>
"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 ."
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
Boolean isValueBig;
if (value > 100)
{
isValueBig = true;
}
else
{
isValueBig = false;
}
Boolean isValueBig;
if(value > 100) { isValueBig = true; } else { isValueBig = false; }
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 fragmento de 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 anidado . 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 alterar 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".