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