Resumen
si / dem谩s , el operador ternario crea una l贸gica de ramificaci贸n en el c贸digo donde se utiliza. A diferencia si / dem谩s declaraciones, el operador ternario es una expresi贸n, es decir, produce (vuelve?) Un valor. Expresiones como (a * b) pueden producir un (int, float, long double) valor num茅rico y (a | | b) puede producir un valor booleano. Pero s贸lo las funciones y el operador ternario pueden producir cualquier tipo de objeto o primitivo.
/ / Establecer el uso de salutaci贸n "si"
String s = null;
if (isFriend) {s = "Hola," + fname} else {s = "Hola," + fname;} / / Set saludo usando '? : '
String s = (isFriend "Hey": "Hello") + fname; Se llama 芦El operador ternario禄 porque es el 煤nico operador (en las lenguas que lo utilizan) que toma tres operandos. Tal vez ser铆a mejor llamarlo 芦evaluativa-Si禄 o 芦Col贸n Pregunta-marca禄, pero no estoy haciendo campa帽a para cambiar su nombre en la actualidad.
programadores funcionales como el operador ternario, ya que crea un bloque de c贸digo que produce un valor de -. muy parecido a un cierrebuena y mala Usos
/ / No me hagas esto - Usa PAR脡NTESIS
a == b | | c + d? e ^ b: d | b Adem谩s, el? : Es tan peque帽o en la p谩gina que se hace muy dif铆cil de ver cuando se utiliza con largos (multil铆nea) operandos. Est谩 dise帽ado para cosas cortas que generalmente encajan en una l铆nea y producen un valor
Todav铆a tengo que encontrar una diferencia significativa entre el tiempo :.? y si / dem谩s declaraciones, por lo que podemos descartar el rendimiento como una raz贸n para elegir una sintaxis sobre el otro.
Hubo una discusi贸n sobre el operador ternario en StackExchange recientemente y una persona proporcionado un gran ejemplo de c贸mo no utilizar el operador ternario:
/ / anidaci贸n del operador ternario es MALVADO - NO HACER ESTO int median1 (int a, int b, int c) {
(a ?
(b ? b
:
(a ? c
: a
:
(a ?
:
(b ? c
: b;
} anidaci贸n del operador ternario es siempre malo, porque no es claro qu茅 pregunta va con qu茅 puntos (::??). Pero encadenando (?:?:? 馃檪 Con el sangrado correcto y bloques cortos de c贸digo pueden ser muy clara. Nota : los ejemplos a continuaci贸n se aprovechan de la naturaleza cortocircuito de retorno declaraciones para eliminar el dem谩s cl谩usula por brevedad:
/ / Con un 'si' para eliminar el anidamiento
int median2 (int a, int b, int c) {
si (a (b (a }
(a (b } me parece que m谩s f谩cil de leer que el uso de sentencias if:
/ / All "si" declaraciones
int median3 (int a, int b, int c) {
if (a if (b b;}
if (a volver c;}
retorno a;}
if (a a;}
if (b c;}
b;}
En Java, se puede llamar a un constructor de la superclase a partir de un constructor de la subclase s贸lo en la primera l铆nea de ese constructor subclase, antes de que los otros m茅todos son llamados. El operador ternario es la 煤nica forma de cambiar los datos de entrada antes de pasarla al constructor super-clase.
public class MyClass se extiende MySuperclass {
p煤blico MyClass (int a) {
(a> 0 cierto:? false);
...} En cualquier lugar que un valor se requiere de un muy peque帽o c谩lculo, el operador ternario puede ser 煤til. Especialmente para la prevenci贸n NullPointerExceptions:
out.print (nombre == null "": nombre?); Conclusi贸n