Programación en Java/Operador if-else

← Sentencia switch Operador if-else Estructuras de iteración →


Salvo ciertos detalles, el programador que conozca el lenguaje C, no notará la diferencia con este "dialecto". Sobre todo a esta altura del curso, que sólo sometemos a Java a una programación de tipo imperativa. Entre todas las construcciones sintácticas que Java heredó del C, existe un curioso operador ternario. Se lo llama operador if-else. Su función es abreviar la notación de la cláusula de selección simple. La sintaxis es la siguiente.

  variable = op1?op2:op3

El operando op1 debe ser de tipo booleano. Los operandos op2 y op3 pueden ser de cualquier tipo, pero compatibles entre si y con la variable que almacene el resultado. Funciona como una selección simple. De acuerdo al valor lógico del operando op1, si es verdadero el resultado de la operación es igual al valor del operando op2. De lo contrario, si op1 es falso, el resultado es el valor del operando op3.

Probemos este nuevo operando. Supongamos que debemos realizar un programa que calcule la distancia entre dos números. Para lograrlo, tomamos el mayor y le restamos el menor. Para empezar, veremos como se realiza con la cláusula if-else, que ya conocemos.

public class Distancia{
   public static void main(String args[]){
      int a = 23;
      int b = 12;
      int j;
      if ( a > b ) {
         j = a - b;
      } else {
         j = b - a;
      }
      System.out.println("El resultado es: " + j );
   }
}

La construcción equivalente, utilizando el operador, es la siguiente :

public class Distancia2{
   public static void main(String args[]){
      int a = 23;
      int b = 12;
      int j = a > b ? a - b : b - a;
      System.out.println("El resultado es: " + j );
   }
}

Como verán, redujo bastante la notación. La expresión booleana, que conforma la condición de selección, pasó al primer operando, la operación verdadera al segundo y la falsa al tercero.

Como cualquier operador silvestre, se puede combinar tranquilamente con el resto para formar expresiones compuestas. Para verlo, mostramos una expresión equivalente a la anterior.

int j = (a > b ? a : b ) - ( a <= b ? a : b);

Se han utilizado los paréntesis debido a que su orden de precedencia es bajísima. De otra forma se hubiera evaluado la resta antes de las selecciones.