Skip to main content

Controlar el flujo de datos

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Enumerar los usos de los operador de comparación.
  • Describir las diferencias entre las instrucciones switch e if-else.

En nuestra vida diaria tenemos que tomar decisiones. ¿Qué me pongo? ¿Qué como? ¿Giro a la derecha o a la izquierda? Lo mismo ocurre a la hora de escribir código. Piense en el pseudocódigo de la hora del té de la unidad 1, en el paso 2 en concreto.

Boil water in a Tea Kettle
Fill Kettle with Water
Switch Kettle On
Wait for Water to Boil

Parece que todo es bastante preciso, ¿no? Para hervir agua, lleno el hervidor de agua, lo enciendo y espero a que el agua hierva. Pero, ¿qué ocurre si el hervidor ya está lleno? ¿Qué ocurre si el hervidor está lleno? ¿Durante cuánto tiempo tendría que hervir el agua?

Expresiones y operadores de expresión

Antes de tomar decisiones, solemos hacer comparaciones. ¿Es este más grande que este otro? ¿Son los dos iguales? Los desarrolladores suelen comparar valores antes de tomar decisiones en cuanto a las aplicaciones. En lo que al código se refiere, se comparan dos expresiones colocando un operador de expresión entre ellas.

Una expresión es un fragmento de código que, cuando se evalúa, tiene como resultado un único valor. Para nuestros objetivos en este módulo, una expresión puede ser un valor literal (como 12), un valor variable (como númeroDeTazasDeTé) o una operación matemática (como 7 x 4).

Los operadores de expresión comparan dos valores o muestran igualdad entre ellos. Una instrucción de comparación contiene dos expresiones separadas por un operador de expresión que produce un valor booleano, ya sea true o false.

Operadores de comparación

Operador Descripción Sintaxis Resultado
<
Menor que
1 < 2
TRUE
<=
Menor o igual que
1 <= 2
3 <= 3
TRUE
==
Igual a
10 == 10
TRUE
!=
<>
No igual a
10 != 0
10 <> 11
TRUE
>
Mayor que
11 > 10
TRUE
>=
Mayor o igual que
40 >=10
40 >= 40
TRUE

¿Por qué el operador Igual a tiene dos signos iguales? Recuerde que utilizamos un solo signo de igual en esta instrucción:

Número entero i = 2

Un signo de igual ( = ) es un operador de asignación. Asigna valores. Si hay dos signos de igual ( == ), se trata de un operador de comparación. Compara dos valores para determinar si son iguales (true) o no (false).

Los operadores son particularmente útiles cuando quiere comparar un valor conocido con una variable, o cuando se comparan los valores de dos variables diferentes.

Integer numberOfTeaCups = 2;
numberOfTeaCups == 3;  //false
numberOfTeaCups == 2; //true

Hemos visto un ejemplo de una variable de número entero y una variable de cadena. También podemos crear una variable booleana que contenga el resultado de una comparación. Eche un vistazo a esto:

Integer numberOfTeaCups = 2;
Boolean result = numberOfTeaCups > 3; // 2 > 3 = false

La línea 1 establece la variable númeroDeTazasDeTé en 2.

La línea 2 crea una variable de tipo booleano llamada resultado, compara el valor de la variable númeroDeTazasDeTé con el número 3 y asigna el resultado de la comparación (false) a la variable resultado.

Aunque las comparaciones son útiles para determinar la manera en la que una cosa se relaciona con otra, en lo que realmente ayudan es en las instrucciones condicionales, ya que ayudan a tomar decisiones.

Instrucciones condicionales

Los desarrolladores utilizan expresiones con instrucciones condicionales para crear estructuras de toma de decisiones que especifican una o más condiciones para que el programa las evalúe o las pruebe. Parece un trabalenguas. Veamos esto poco a poco.

Una instrucción condicional establece dos o más opciones. Si alguna vez ha creado criterios en Flow Builder, habrá utilizado una instrucción condicional. Por ejemplo: "si Estado es igual a California, se muestran registros en la vista de lista" es una instrucción condicional. "Estado es igual a California" es la condición, y "se muestran registros en la vista de lista" es la acción que el programa lleva a cabo si la condición se cumple. En este ejemplo, las dos opciones son mostrar registros (explícita) y no mostrar registros (implícita).

Instrucciones if-else

Una instrucción condicional que se suele utilizar mucho en Apex es la instrucción if-else. Tiene este aspecto:

if(condition is true) {
    //do this
} else {
    //do this
}

La línea 1 define la condición (escrita entre paréntesis).
La línea 2 contiene el código para ejecutar si la condición de la línea 1 es true.
La línea 3 presenta la segunda opción, la opción "else".
La línea 4 contiene el código para ejecutar si la condición de la línea 1 es false.

En Apex, ponemos las instrucciones condicionales entre llaves: { }. Cada llave de apertura ({) debe estar emparejada con una llave de cierre (}). Cuando un bloque de código tiene una llave de apertura y no tiene llave de cierre, se produce un error.

Vamos a utilizar una instrucción condicional en nuestro pseudocódigo de la hora del té para comprobar el nivel del agua en el hervidor y decidir qué hacer después basándonos en el nivel del agua.

  1. En Developer Console, haga clic en Debug (Depuración) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
  2. Copie este código y péguelo en la ventana Introducir código Apex.
    String waterLevel = 'full'; /*This variable keeps track of the water level status: full or empty*/
      
    if(waterLevel == 'empty') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full'; /*Once the tea kettle is filled the variable is changed to full*/
    } else {
        System.debug('The tea kettle is full');
    }
  3. Seleccione la casilla de verificación Abrir registro y haga clic en Ejecutar. Se abre el registro de ejecución, que muestra el resultado de la ejecución del código.
  4. Seleccione la casilla de verificación Solo depurar en la parte inferior de la pantalla.

En la línea 1, inicializamos la variable nivelDeAgua a lleno. Normalmente, los usuarios introducen los valores de las variables en el código o estos se derivan de otros datos que no están especificados en el código. En el ejemplo de la hora del té, obtendríamos datos físicos de los sensores del hervidor para determinar el nivel de agua. Cuando ese tipo de datos no está disponible, los desarrolladores establecen valores directamente en el código (de manera temporal), de manera que puedan ejecutar el código y probarlo. El proceso de establecer valores en el código se denomina codificación. A fin de realizar pruebas, codificamos el valor de la variable nivelDeAgua en lleno. Como ese valor ya se había establecido, la primera instrucción if (línea 3) nunca se ejecutará, ya que nivelDeAgua nunca empezará siendo vacío.

El código comprueba que la variable nivelDeAgua sea igual que vacío. Como codificamos la variable nivelDeAgua para que fuese lleno, la condición de instrucción if es false. Cuando la condición if es false, el bloque de código else se ejecuta.

Nuestro código tiene dos opciones: que el nivel de agua sea lleno y que el nivel de agua sea vacío. Pero esas no son las únicas posibilidades, ¿verdad? Puede ser que el hervidor esté parcialmente lleno. ¿Cómo gestionamos más de dos posibilidades?

Instrucciones if-else if

Para gestionar más de dos posibilidades, utilizamos una instrucción if-else if. La instrucción if-else if agrega otra condición if antes de la condición else final. Veamos un ejemplo.

  1. En Developer Console, haga clic en Depuración | Abrir ventana de ejecución anónima.
  2. Copie este código y péguelo en la ventana Introducir código Apex.
    String waterLevel = 'half';
      
    if(waterLevel == 'empty') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full';
    } else if(waterLevel == 'half') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full';
    } else { /*This statement only runs if line 3 and line 6 result in false.*/
        System.debug('The tea kettle is full');
    }
  3. Seleccione la casilla de verificación Abrir registro y haga clic en Ejecutar. Se abre el registro de ejecución, que muestra el resultado de la ejecución del código.
  4. Seleccione la casilla de verificación Solo depurar en la parte inferior de la pantalla.

A medida que prueba el código, cambie el valor la variable nivelDeAgua en la línea 1. El resultado en el registro de depuración refleja el cambio. Pruebe los tres valores: medio, lleno y vacío.

Ordene las instrucciones condicionales de manera que la primera condición sea la más común. Este orden reduce la cantidad de código que se ejecuta cada vez que se inicia el bloque de código. En el ejemplo de la hora del té, es más probable que el hervidor esté vacío, así que colocamos esa condición en primer lugar. No es probable que el hervidor esté lleno, así que colocamos esa condición la última.

Instrucciones switch

La instrucción switch es una alternativa más eficaz que la instrucción if-else. Una instrucción switch especifica un conjunto de valores y prueba una expresión para determinar si coincide con uno de esos valores. Este es el aspecto que tiene:

switch on expression {
    when value1 {
        //code block 1
    }
    when value2 {
        //code block 2
    }
    when else { //if none of the previous values apply
        //code block 3
    }
}

En una instrucción switch, puede tener uno o más valores después de la palabra reservada when

switch on expression {
    when value1 { //single value
        //code block 1
    }
    when value2, value3 { //multiple values
        //code block 2
    }
}

Apliquemos instrucciones switch al pseudocódigo de la hora del té.

  1. En Developer Console, haga clic en Depuración) | Abrir ventana de ejecución anónima.
  2. Copie este código y péguelo en la ventana Introducir código Apex.
    String waterLevel = 'empty';
      
    //option 1 using a single value
    switch on waterLevel {
        when 'empty' {
            System.debug('Fill the tea kettle');
        }
        when 'half' {
            System.debug('Fill the tea kettle');
        }
        when 'full' {
            System.debug('The tea kettle is full');
        }
        when else {
            System.debug('Error!');
        }
    }
      
    //option 2 using multiple values
    switch on waterLevel {
        when 'empty', 'half' { //when waterLevel is either empty or half
            System.debug('Fill the tea kettle');
        }
        when 'full' {
            System.debug('The tea kettle is full');
        }
        when else {
            System.debug('Error!');
        }
    }
  3. Seleccione la casilla de verificación Abrir registro y haga clic en Ejecutar. Se abre el registro de ejecución, que muestra el resultado de la ejecución del código.
  4. Seleccione la casilla de verificación Solo depurar en la parte inferior de la pantalla.

Operadores lógicos

Ya ha visto cómo gestionar dos o más condiciones. Ahora bien, ¿qué hacemos cuando una sola condición puede satisfacerse con más de un valor?

Operadores lógicos

Operador OR AND
Símbolo de operador || &&
Pseudocódigo Si X or (o) Y, haga esto.
De lo contrario, haga esto.
Si X and (y) Y, haga esto.
De lo contrario, haga esto.
Código Apex if(X || Y) {
//do this
} else {
//do this
}
(si(X || Y) { //haga esto} de lo contrario {//haga esto otro})
if(X && Y) {
//do this
} else {
//do this
}
(si(X && Y) { //haga esto} de lo contrario { //haga esto otro})

Los operadores lógicos and y or le permiten escribir código que compruebe más de un valor para determinar si una condición es true o false. El operador and requiere que todos los valores sean true para satisfacer una condición. El operador or requiere que al menos uno de los valores sea true para satisfacer la condición.

Evaluar operadores lógicos

Operador lógico Sintaxis Descripción
&& (AND)
X && Y

System.debug(true && true); // true

System.debug(false && true); //false

System.debug(true && false); // false

System.debug(false && false); //false
X e Y son valores booleanos. Si ambos, X e Y, son true, la expresión es true. De lo contrario, la expresión es false.
|| (OR)
X || Y

System.debug(true || true); //true

System.debug(false || true); //true

System.debug(true || false); //true

System.debug(false || false); //false
X e Y son valores booleanos. Si ambos, X e Y, son false, la expresión es false. De lo contrario, la expresión es true.

Vamos a probar los operadores lógicos. Este es nuestro código cuando se escribió como una instrucción if-else if.

String waterLevel = 'half';
  
if(waterLevel == 'empty') {
    System.debug('Fill the tea kettle');
    waterLevel = 'full';
} else if(waterLevel == 'half') {
    System.debug('Fill the tea kettle');
    waterLevel = 'full';
} else { //This statement only runs if line 3 and line 6 result in false.
    System.debug('The tea kettle is full');
}

Observe las líneas 4 y 5 y las líneas 7 y 8. Son idénticas. A esto se le conoce como código redundante. Eliminar la redundancia es una práctica recomendada, ya que hace que el código se pueda leer mejor y sea más sencillo de comprender, depurar y mantener. Nuestro código realiza las mismas acciones independientemente de si nivelDeAgua es vacío o medio. Podemos simplificar este código combinando vacío y medio en una condición. Utilizamos el operador or para que la condición se cumpla cuando cualquier valor (vacío or medio) sea true.

  1. En Developer Console, haga clic en Depuración | Abrir ventana de ejecución anónima).
  2. Copie este código y péguelo en la ventana Introducir código Apex.
    String waterLevel = 'half';
      
    if(waterLevel == 'empty' || waterLevel == 'half') {
        System.debug('Fill the tea kettle');
        waterLevel = 'full';
    } else { //This statement only runs if line 3 false.
        System.debug('The tea kettle is full');
    }
  3. Seleccione la casilla de verificación Abrir registro y haga clic en Ejecutar. Se abre el registro de ejecución, que muestra el resultado de la ejecución del código.
  4. Seleccione la casilla de verificación Solo depurar en la parte inferior de la pantalla.

Bien, mire eso. Hemos eliminado la redundancia de nuestro código. Utilizar operadores lógicos (&& y ||) es una manera eficaz de eliminar o reducir el código redundante y mejorar la legibilidad.

Mantener el código limpio

En programación, suele haber más de una manera de hacer las cosas. Por ejemplo, puede utilizar instrucciones switch o instrucciones if-else y conseguir el mismo resultado. Lo que se debe tener en cuenta a la hora de seleccionar un tipo de instrucción es la manera en la que cada tipo afecta a la legibilidad de su código. A medida que continúa trabajando, aprenderá más maneras de mantener limpio el código. Por ahora, céntrese en hacer que el código se pueda leer y comprender fácilmente.

Recursos

¡Siga aprendiendo gratis!
Regístrese para obtener una cuenta y continuar.
¿Qué hay para usted?
  • Consiga recomendaciones personalizadas para sus objetivos profesionales
  • Practique sus habilidades con retos prácticos y pruebas
  • Siga y comparta su progreso con empleadores
  • Póngase en contacto para recibir asesoramiento y oportunidades laborales