Esto es más o menos cubiertos por las otras respuestas, pero "es una expresión" en realidad no se explica por qué es tan útil ...
En lenguajes como C++ y C#, se puede definir constantes locales (dentro de un cuerpo de método) usándolos. No
const int speed = (shiftKeyDown) ? 10 : 1;
es lo mismo que:: Esto no es posible con una convencional si/entonces declaración porque el valor de toda una constante tiene que ser asignado dentro de esa sola declaración
const int speed;
if (shifKeyDown)
speed = 10; // error - can't assign to a const
else
speed = 1; // error
En un similares forma en que puede insertar una expresión terciaria en otro código.A la vez que el código fuente más compacto (y en algunos casos más legibles como resultado) también puede hacer que el código máquina generado más compacto y eficiente:
MoveCar((shiftKeyDown) ? 10 : 1);
... puede generar menos código que tener que llamar al mismo método en dos ocasiones:
if (shiftKeyDown)
MoveCar(10);
else
MoveCar(1);
por supuesto, también es una forma más conveniente y conciso (menos escribir, menos repetición, y puede reducir la posibilidad de errores si tiene que duplicar los trozos de código en un if/más). En los casos limpias "patrón común" como este:
object thing = (reference == null) ? null : reference.Thing;
... es simplemente más rápido para leer/análisis sintáctico/entender (una vez que está acostumbrado a ello) que la de largo aliento if/else equivalente, por lo te puede ayudar a 'grok' codificar más rápido.
Por supuesto, sólo porque es útil no quiere decir que es lo mejor que puede uso en todos los casos. Aconsejo usarlo solo para fragmentos cortos de código donde el significado es claro (o se hace más claro) usando ?:
- si lo usa en código más complejo, o anida los operadores ternarios entre sí, puede hacer que el código sea terriblemente difícil de usar. leer.
Usted ya lo hice la esencia de eso. –
Solo he hecho un poco en C#, pero la mayoría de los lenguajes permiten llamadas a funciones dentro del operador condicional.C realmente no? Eso parece muy extraño ... –
@Nicholas Knight: Supongo que el OP significa que no se puede hacer, por ejemplo, 'SomeCheck()? DoFirstThing(): DoSecondThing(); '- debe usar la expresión para devolver un valor. –