Controlar el flujo de los datos
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Enumerar los usos de los operadores de comparación.
- Describir la diferencia entre instrucciones switch e if-else.
En nuestras vidas, siempre hay decisiones para tomar. ¿Qué me pongo? ¿Qué como? ¿Voy a la derecha o a la izquierda? Lo mismo pasa al redactar código. Piense en nuestro pseudocódigo Hora del té en la unidad 1, específicamente en el paso 2.
Boil water in a Tea Kettle Fill Kettle with Water Switch Kettle On Wait for Water to Boil
Vaya... todo parece bastante preciso, ¿verdad? Para hervir agua, lleno la tetera de agua, enciendo la tetera y espero que el agua hierva. Sin embargo, ¿qué pasa si ya hay agua en la tetera? ¿Y si la tetera está llena? ¿Cuánto debe hervir el agua?
Expresiones y operadores de expresiones
Antes de tomar decisiones, a menudo realizamos comparaciones. ¿Es esto más grande que aquello? ¿Es esto igual a qué? Los desarrolladores muchas veces comparan valores antes de tomar decisiones en sus aplicaciones. En el código, comparamos dos expresiones colocando un operador de expresión entre ellas.
Una expresión es un fragmento de código que, cuando se evalúa, da como resultado un único valor. Para el propósito de este módulo, una expresión podría ser un valor literal (como 12) o una variable (como númeroDeTazasTé) o una operación matemática (como 7 x 4).
Los operadores de expresiones compraran o muestran igualdad entre dos valores. Una instrucción de comparación consta de dos expresiones separadas por un operador de expresión, y genera un valor booleano, en vez de verdadero o falso.
Operadores de comparación
Operador | Descripción | Sintaxis | Resultado |
---|---|---|---|
< |
Menor que |
1 < 2 |
TRUE |
<= |
Menor o igual a |
1 <= 2 3 <= 3 |
VERDADERO |
== |
Igual a |
10 == 10 |
TRUE |
!= <> |
No es igual a |
10 != 0 10 <> 11 |
VERDADERO |
> |
Mayor que |
11 > 10 |
TRUE |
>= |
Mayor o igual a |
40 >=10 40 >= 40 |
VERDADERO |
¿Por qué tiene el operador Igual a dos signos de igualdad? Recuerde que utilizamos un único signo de igualdad en esta instrucción:
Un signo de igualdad (=
) es un operador de asignación. Asigna valores. Dos signos de igualdad (==
) son un operador de comparación. Compara dos valores para determinar si son iguales (true) o no iguales (falso).
Los operadores son particularmente útiles cuando desea comparar un valor conocido con una variable, o comparar los valores de dos variables diferentes.
Integer numberOfTeaCups = 2; numberOfTeaCups == 3; //false numberOfTeaCups == 2; //true
Vimos un ejemplo de una variable de entero y una variable de cadena. También creamos una variable booleana que aloja el resultado de una comparación. Vea esto:
Integer numberOfTeaCups = 2; Boolean result = numberOfTeaCups > 3; // 2 > 3 = false
La línea 1 establece la variable númeroDeTazasTé en 2.
La línea 2 crea una variable de tipo booleano denominada result
, que compara el valor de la variable númeroDeTazasTé con el número 3 y asigna el resultado de la comparación (false) con la variable result
.
Aunque las comparaciones son útiles para determinar cómo se relaciona una cosa con otra, donde realmente destacan es dentro de instrucciones condicionales, donde ayudan a tomar decisiones.
Instrucciones condicionales
Los desarrolladores utilizan expresiones dentro de instrucciones condicionales para crear estructuras de toma de decisiones que especifican una o más condiciones que el programa evaluará o probará. Vaya, son palabras altisonantes. Vamos a desglosarlo.
Una instrucción condicional establece una o más opciones. Si alguna vez creó criterios en Flow Builder, utilizó una instrucción condicional. Por ejemplo, “si Estado es igual a California, entonces Mostrar registros en la vista de lista” es una instrucción condicional. “Estado es igual a California” es la condición y “Mostrar registros en la vista de lista” es la acción que toma el programa solo cuando la condición es verdadera. En este ejemplo, las dos opciones son mostrar registros (explícitas) y no mostrar registros (implícitas).
Instrucciones If-Else
Una instrucción condicional utilizada comúnmente 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 a ejecutar si la condición de la línea 1 es verdadera.
La línea 3 presenta la segunda opción, la opción si no (else).
La línea 4 contiene el código a ejecutar si la condición de la línea 1 es falsa.
En Apex, encerramos las instrucciones condicionales entre llaves: { }
. Cada corchete de apertura ({
) debe ir con un corchete de cierre (}
). Cuando un bloque de código tiene un corchete de apertura y no tiene un corchete de cierre, se produce un error.
Utilicemos una instrucción condicional en nuestro pseudocódigo Hora del té para comprobar el nivel del agua en la tetera y decidir qué hacer a continuación en función del nivel del agua.
- En Developer Console, haga clic en Debug (Depuración) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- Copie el siguiente código y péguelo en la ventana Enter Apex Code (Ingresar 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'); }
- Seleccione la casilla de verificación Open Log (Abrir registro) y haga clic en Execute (Ejecutar). Se abre Execution Log (Registro de ejecución), mostrando el resultado de la ejecución de su código.
- Seleccione la casilla de verificación Debug Only (Solo depurar) en la parte inferior de la pantalla.
En la línea 1, inicializamos la variable nivelAgua en lleno
. Normalmente, los valores de la variable en el código son ingresados por usuarios o derivados de otros datos, no se especifican dentro del código en sí. En nuestro ejemplo Hora del té, obtendríamos datos físicos procedentes de sensores en la tetera para determinar el nivel del agua. Cuando dichos datos no están disponibles, los desarrolladores establecen valores directamente en el código (temporalmente) de modo que puedan ejecutar el código y probarlo. Establecer valores en el código se denomina codificar. Por motivos de prueba, codificamos el valor de la variable nivelAgua en lleno
. Debido a que el valor ya se estableció, la primera instrucción if
(línea 3) nunca se ejecutará, porque nivelAgua nunca empezará siendo vacía
.
El código comprueba si la variable nivelAgua es igual a vacía
. Debido a que codificamos nivelAgua en lleno
, la condición de la instrucción if
es falsa. Cuando la condición if
es falsa, el bloque de código else
se ejecuta.
En este momento, nuestro código controla dos opciones: el nivel de agua es lleno
y el nivel de agua es vacío
. Pero esas no son las únicas posibilidades, ¿verdad? La tetera podría estar parcialmente llena. ¿Cómo controlamos más de dos posibilidades?
Instrucciones If-Else If
Para controlar 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. Observemos un ejemplo en acción.
- En Developer Console, haga clic en Debug (Depuración) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- Copie el siguiente código y péguelo en la ventana Enter Apex Code (Ingresar 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'); }
- Seleccione la casilla de verificación Open Log (Abrir registro) y haga clic en Execute (Ejecutar). Se abre Execution Log (Registro de ejecución), mostrando el resultado de la ejecución de su código.
- Seleccione la casilla de verificación Debug Only (Solo depurar) en la parte inferior de la pantalla.
A medida que prueba el código, cambie el valor de la variable nivelAgua
en la línea 1. El resultado del registro de depuración refleja el cambio. Pruebe los tres valores: medio
, lleno
y vacío
.
Disponga las instrucciones condicionales de modo que la primera condición sea la más común. Esta disposición reduce la cantidad de código en ejecución cada vez que el bloque de código se ejecuta. En nuestro ejemplo Hora del té la tetera está probablemente vacía, de modo que ponemos esa condición primero. Posiblemente la tetera no esté llena, de modo que comprobamos esa condición en último lugar.
Instrucciones switch
Una alternativa más eficaz para una instrucción if-else es una instrucción switch. 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 su aspecto:
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 la instrucción switch a nuestro pseudocódigo Hora del té.
- En Developer Console, haga clic en Debug (Depuración) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- Copie el siguiente código y péguelo en la ventana Enter Apex Code (Ingresar 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!'); } }
- Seleccione la casilla de verificación Open Log (Abrir registro) y haga clic en Execute (Ejecutar). Se abre Execution Log (Registro de ejecución), mostrando el resultado de la ejecución de su código.
- Seleccione la casilla de verificación Debug Only (Solo depurar) en la parte inferior de la pantalla.
Operadores lógicos
Ya vio cómo controlar dos o más condiciones. Ahora bien, ¿qué hace cuando una única condición puede ser satisfecha por más de un valor?
Operadores lógicos
Operador | O BIEN | Y |
Símbolo de operador | || | && |
Pseudocódigo | Si X o Y, hacer esto. En caso contrario, hacer aquello. |
Si X y Y, hacer esto. En caso contrario, hacer aquello. |
Código Apex |
if(X || Y) { |
if(X && Y) { |
Los operadores lógicos and
y or
le permiten redactar código que comprueba más de un valor para determinar si una condición es verdadera o falsa. El operador and
requiere que todos los valores sean verdaderos para satisfacer la condición. El operador or
requiere que al menos un valor sea verdadero para satisfacer la condición.
Evaluación de operadores lógicos
Operador lógico | Sintaxis | Descripción |
---|---|---|
&& (AND) |
X && Y |
X e Y son valores booleanos. Si tanto X como Y son verdaderos, la expresión es verdadera. En caso contrario la expresión es falsa. |
|| (OR) |
X || Y |
X e Y son valores booleanos. Si tanto X como Y son falsos, la expresión es falsa. En caso contrario la expresión es verdadera. |
Probemos los operadores lógicos. Este es nuestro código cuando estaba redactado 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'); }
Mire las líneas 4-5 y las líneas 7-8. Son idénticas. Llamamos a esto código redundante. La eliminación de redundancias es una mejor práctica porque hace que el código sea más legible y fácil de comprender, depurar y mantener. Nuestro código realiza las mismas acciones si nivelAgua es vacío
o medio
. Podemos simplificar este código combinando vacío
ymedio
en una condición. Utilizamos el operador or
de modo que se satisfaga la condición cuando cualquiera de los valores (vacío
o medio
) sea verdadero.
- En Developer Console, haga clic en Debug (Depuración) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- Copie el siguiente código y péguelo en la ventana Enter Apex Code (Ingresar 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'); }
- Seleccione la casilla de verificación Open Log (Abrir registro) y haga clic en Execute (Ejecutar). Se abre Execution Log (Registro de ejecución), mostrando el resultado de la ejecución de su código.
- Seleccione la casilla de verificación Debug Only (Solo depurar) en la parte inferior de la pantalla.
Vaya, mire eso. Retiramos nuestra redundancia de código. El uso de operadores lógicos (&&
y ||
) es una forma eficaz de retirar el código redundante y mejorar la legibilidad.
Mantener limpio su código
En programación, a menudo tiene más de una forma de hacer algo. Por ejemplo, puede utilizar instrucciones switch o instrucciones if-else y llegar al mismo resultado. Lo importante a tener en cuenta cuando selecciona un tipo de instrucción para utilizar es cómo afecta a la legibilidad de su código. A medida que siga trabajando con código aprenderá más formas de mantenerlo limpio. Por ahora, céntrese en hacer que su código sea fácil de leer y comprender.