If / Else / Else If
El nodo Decision de Flow, escrito en código: una pregunta de sí o no, y qué hacer en cada caso.
✓ En esta sub-lección
- 01Escribir un if con su condición y su bloque, y añadirle else y else if.
- 02Ordenar las ramas de un else if sabiendo que gana la primera que se cumple.
- 03Escribir condiciones que no revienten cuando un valor viene vacío.
La nutria: ¿Te acuerdas? · Repaso del Módulo 1
Con String tier = amount >= 100000 ? 'Gold' : 'Standard';, ¿qué vale tier si amount es 50000?
Hasta ahora tu código hacía siempre lo mismo, de arriba abajo. Con if aprende a elegir: «si la oportunidad supera 100.000, avisa a dirección; si no, sigue». Es la primera vez que el código decide, y lo hace exactamente como un nodo Decision.
La nutria: El paralelo de Admin
Anatomía de un if
Un if tiene tres piezas: la palabra if, una condición entre paréntesis que vale true o false, y un entre llaves con lo que se hace cuando es true. Si la condición es false, el bloque entero se salta y el código sigue debajo.
Decimal amount = 150000;
if (amount >= 100000) {
System.debug('Avisar a dirección');
}
System.debug('Esta línea se ejecuta siempre');else: la salida por defecto
else no lleva condición: recoge todo lo que no entró en el if. De las dos ramas se ejecuta siempre exactamente una, nunca las dos y nunca ninguna.
String approver;
if (amount >= 100000) {
approver = 'Director comercial';
} else {
approver = 'Jefe de equipo';
}else if: varias salidas, en orden
Cuando hay más de dos casos encadenas else if. Apex evalúa las condiciones de arriba abajo y entra en la primera que se cumple; las demás ni se miran. Es la misma regla que el orden de las salidas en un Decision de Flow, y es la fuente del error más común con else if.
if (revenue == null) { tier = 'Standard';false} else if (revenue >= 1000000) { tier = 'Platinum';…} else if (revenue >= 100000) { tier = 'Gold';…} else { tier = 'Standard';…
Paso 1 de 4
revenue == null es false con revenue = 250.000: se baja a la siguiente.
// ❌ Mal ordenado: 250.000 cumple la primera condición
if (amount >= 10000) {
tier = 'Bronce';
} else if (amount >= 100000) {
tier = 'Oro'; // nunca se alcanza
}
// ✅ De la condición más exigente a la menos exigente
if (amount >= 100000) {
tier = 'Oro';
} else if (amount >= 10000) {
tier = 'Bronce';
} else {
tier = 'Estándar';
}Condiciones que no revientan
La condición tiene que ser un Boolean. Y aquí vuelve el del Módulo 1: un Boolean declarado sin valor no es false, es null, y un if sobre null lanza una . Lo mismo pasa si comparas un campo vacío con un número. La defensa es la de siempre: comprobar null primero y apoyarte en la evaluación en corto de &&.
Boolean hasOptedOut; // null, no false
if (hasOptedOut) { } // ❌ NullPointerException
Opportunity opp = new Opportunity(Name = 'Renovación');
// Amount está vacío: comprueba antes de comparar
if (opp.Amount != null && opp.Amount > 50000) {
System.debug('Oportunidad grande');
}| En Flow | En Apex |
|---|---|
| Elemento Decision | if / else if / else |
| Condición de una salida | (amount >= 100000) |
| «All conditions are met» | && |
| «Any condition is met» | || |
| Salida por defecto | else |
El encargo de este módulo
En el Módulo 1 preparaste los datos de la renovación de Northwind Trading. Ahora que los datos están, la reunión con Ventas cambia de tono: ya no piden «guárdame esto», piden «que Salesforce DECIDA solo». Y decidir es exactamente de lo que va este módulo. Como en el anterior, los ocho talleres son un mismo encargo troceado: cada uno resuelve una regla, y la última tarea las junta todas.
La nutria: Lo que pidieron, regla por regla