Operador ternario (? :) En Java

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.

He aquí dos ejemplos sencillos. Cada uno crea una cadena s y establece su valor en función del valor de x:

   / / 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 cierre

buena 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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *