El operador ternario ?: en Java

18/may/2010 Java , 22 Comentarios
java

Calcular el mayor de dos números con Java es una cosa realmente sencilla con Java. Si preguntas a cualquier programador te dirá que puedes utilizar un simple if-then-else. Quedando un programa de pocas líneas.

  1. if (x>y)
  2. mayor = x;
  3. else
  4. mayor = y;

Pero lo que, sorprendentemente, muchos programadores Java no saben, es que existe un operador condicional ternario ?: que nos ayuda a realizar estas operaciones con mucho menor código.

La estructura del operador ternario ?: es la siguiente:

resultado = (condicion)?valor1:valor2;

Donde a la variable resultado recibirá el valor1 en el caso de que la condición sea true o bien el valor2 en el caso de que la condición sea false.

Así, si queremos calcular el mayor de dos números tendremos el siguiente código:

  1. mayor=(x>y)?x:y;

Sin duda alguna, mucho menos código. :-) ¿Conocías el operador ternario?

Vídeos sobre Java

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

22 comentarios en “El operador ternario ?: en Java”

Víctor Cuervo

Lusi

Y encima es elegante, oye.

Víctor Cuervo

Javi

Hola Pablo.

Tu error es porque estas haciendo referencia a un Objeto nulo y eso te lanza un NullPointer.

Inicializa el objeto como te dijeron o haz el ternario con texto2 el primero para asignarle valor a result…pero :result siendo result un Objeto nulo es NullPointer asegurado.

Víctor Cuervo

Alberto Rodriguez

Para Pablo Godoy:

Me intriga tu error… supiste cual era la razón?

Probe inicializando
Long result = 0L;

De este modo no genera error, pero no encuentro la razon por la cual al inicializar a null si.

Saludos!

Víctor Cuervo

tania

alguien que sepa programar!!! necesito un super programota (para mi que no se nada) por favor ayuda estoy en examen
XD respondan ahoritaaa yaaaaaaa

Víctor Cuervo

Angel

Lo conocía, pero nunca lo uso…

Me parece que un buen código es el que más personas leen perfectamente, y como dices, mucha gente se tiene que parar a pensar cuando lo ven.

Víctor Cuervo

manuel

como se aprende a escribir mejor tu código leyendo el de los demás, principalmente el de los más avanzados. Yo me entere de este operador, el operador ternario “?”

Víctor Cuervo

xavy

g.setColor(jugador==1 ? Color.red : Color.black);

LA ANTERIOR SENTENCIA ES VALIDA, PORQUE TENGO QUE COMENTAR QUE NO ME PROVOCA NINGUN ERROR PERO FUNCIONA AL REVES: g.setColor(jugador==1? Color.black : Color.red);

Víctor Cuervo

Pablo Godoy

Para Joel,

No entendí eso de “revisa un booleano el cual tu no haces uso”.
Tampoco entiendo por qué tengo que usar == en vez de equals.
¿Cuáles serían los detallitos en la sintaxis a corregir?

Víctor Cuervo

Joel

para godoy tu error se debe a que el operador ternario revisa un booleano elcual tu no haces uso lo que necesitas es usar == y pues corregir algunos detallitos en tu sintaxis

Víctor Cuervo

MIKI90

Perdón, tienes razón me equivoque en mi respuesta, en un caso practico podrías intentar poner todo en términos de la primitiva long o objetos Long de manera inicializada como forma de depuración, aun asi estaré investigando, cualquier cosa que encuentre la posteare :)

saludos

Víctor Cuervo

Pablo Godoy

En mi código no estoy comparando el valor null con valores “long”.

String valor = “texto2″;
valor.equals(“texto1″)

En todo caso, esa excepción debería ser tratada dentro de la implementación del operador, y retornar el null a la variable result.

public static void main(String[] args) {
Long result = null;
String valor = “texto2″;
result = valor.equals(“texto1″) ? 1L : result;
result = valor.equals(“texto2″) ? 2L : result;
result = valor.equals(“texto3″) ? 3L : result;
System.out.println(result);
}

Víctor Cuervo

MIKI90

Si, el valor null lo comparas con valores “long”, de ahí es porque se lanza la excepción, en tal caso podrías inicializar el objeto Long -> Long result = new Long(0); ya que con solo ponerlo a null no significa que sea cero en terminos de la primitiva long. si por alguna razón ese objeto tuviera que ser null tendrías que validar o capturar esa excepción para que se compare de manera correcta con los valores long.

Víctor Cuervo

Pablo Godoy

MIKI90, yo inicialicé en null un “Long” y no un “long”.
Internamente el operador ternario debe querer inicializar en null un long primitivo, y por eso da excepción, pero para mi debería contemplar esto para que no arroje esa excepción.
Saludos!

Víctor Cuervo

Pablo Godoy

MIKI90, yo inicialicé en null un “Long” y no un “long”.
Internamente el operador ternario debe querer iniciar un long primitivo, y por eso da excepción, pero para mi debería contemplar esto para que no arroje esa excepción.
Saludos!

Víctor Cuervo

Isaac

Amigo muchas gracias, lo busque en varios libros pero solo me enredaban con sus definiciones, pero tu me lo explicaste en unas cuantas palabras, de antemano gracias y que Dios te bendiga.

Víctor Cuervo

MIKI90

No puedes inicializar un long a null
public static void main(String[] args) {
long result = 0L;
String valor = “texto2″;
result = valor.equals(“texto1″) ? 1L : result;
result = valor.equals(“texto2″) ? 2L : result;
result = valor.equals(“texto3″) ? 3L : result;
System.out.println(result);
}

Víctor Cuervo

Pablo Godoy

Para 0day:
a) No hace falta declarar 1L, 2L ni 3L, ya que son valores, y no variables.
b) No hacen falta paréntesis
c) El valor de “Result” debería ser 2L, en vez de null, y en caso que lo fuera, no habría problemas con el System.out.println(null);

El compilador arroja un NullPointerException, la cual extiende de RuntimeException, por lo tanto el IDE no va a mostrar ningún error, ya que no es un error en tiempo de compilación.
Saludos!

Víctor Cuervo

0day

Para Pablo Godoy:
No soy ningún experto, pero veo varias causas posibles:

a) 1L, 2L y 3L no parecen estar definidos en ningún lado
b) Falta un paréntesis en cada línea en la que usas el operador ?, el que envuelve la condición a evaluar
c) result puede ser null a la hora de imprimirlo en pantalla, no se hasta que punto puede pasársele un null a System.out.println

De todas formas usar un IDE debería ayudarte a solucionar esos problemas, ya que él mismo te indica los fallos en el código, bien al momento de escribirlos, bien al compilar.

Saludos!

Víctor Cuervo

Pablo Godoy

Hola, estuve usando el operador ternario, y hubo un error, por qué habrá sido?

Este es el ejemplo:

public static void main(String[] args) {
Long result = null;
String valor = “texto2″;
result = valor.equals(“texto1″) ? 1L : result;
result = valor.equals(“texto2″) ? 2L : result;
result = valor.equals(“texto3″) ? 3L : result;
System.out.println(result);
}

Víctor Cuervo

Xagerao

Hola!
Realmente no conocía el operador ?, muy útil la verdad, pero ahora me surge una duda ¿que es, en términos de coste temporal, mejor opción computacional?

Víctor Cuervo

Edgar

lo habia visto x ahi en algun codigo pero no sabia como funcioba =).. ps ahora ya
se te agradece

Víctor Cuervo

Coatepec

wow interesante, gracias no sabia sobre ese operador jeje

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*


*