Pregunta

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?

¿Fue útil?

Solución

Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

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

Otros consejos

La diferencia entre la operación ternaria y if / else es que la expresión ternary es una declaración que se evalúa como 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);

Cuando era nuevo en C ++, descubrí que me ayudó 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 me entrené para 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ático del operador ternario porque pensé que era difícil de leer. En ese momento, Jon Skeet y su libro, C # in Depth finalmente golpearon a este viejo perro en la cabeza y lograron que se hundiera. Jon dijo, y parafraseo, piense en ello como una pregunta.

  

valor > 100?

     

" sí " : " no "

Ahora los ciegos pueden ver.

Espero que esto te ayude a que sea una segunda naturaleza.

Como se cita en la ?: Página de MSDN del operador , " el operador condicional (? :) devuelve uno de los dos valores dependiendo del valor de una expresión booleana. "

Para que pueda usar el operador ternario para devolver más que solo booleanos:

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

Ejemplo de PHP

<?php

  // Example usage for: Ternary Operator
  $action = (empty(

Ejemplo de 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

POST['action'])) ? 'default' :

Ejemplo de 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

POST['action']; // The above is identical to this if/else statement if (empty(

Ejemplo de 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

POST['action'])) { $action = 'default'; } else { $action =

Ejemplo de 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

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 . "

Documentación PHP sobre operadores de comparación

Asegúrese de no mezclar tipos en partes verdaderas / falsas 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 usar operadores ternarios para establecer valores booleanos, ya que lo que está evaluando ya es un valor booleano.

Me doy cuenta de que era solo un ejemplo, pero valió la pena señalarlo.

Otros ya lo han respondido, pero aquí hay una cosa que realmente 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 posible variación de algún valor, digamos por simplificación 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 ternary es solo otra forma de escribir una declaración if..else que se puede refactorizar para esto

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 malvado, 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 y demás).

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

Como se cita de MSDN (anotado en una publicación anterior)

resultado de cadena = (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 " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top