Apex Academy
Módulo 2·01·20 min

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 Admin esUn nodo Decision de Flow con sus salidas y la salida por defecto

✓ En esta sub-lección

  1. 01Escribir un if con su condición y su bloque, y añadirle else y else if.
  2. 02Ordenar las ramas de un else if sabiendo que gana la primera que se cumple.
  3. 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

Cuando yo hacía esto en Flow, arrastraba un Decision, creaba una salida «Gran cuenta» con la condición Amount ≥ 100000 y dejaba la salida por defecto para todo lo demás. En Apex es lo mismo con otra ropa: la salida es if, la condición va entre paréntesis y lo que cuelga de la salida va entre llaves. La salida por defecto se llama else.

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.

Apex
Decimal amount = 150000;

if (amount >= 100000) {
    System.debug('Avisar a dirección');
}
System.debug('Esta línea se ejecuta siempre');
Las líneas dentro de las llaves van sangradas cuatro espacios: no cambia nada para Apex, pero hace visible qué depende de la condición.

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.

Apex
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.

FACTURACIÓN
  1. if (revenue == null) { tier = 'Standard';false
  2. } else if (revenue >= 1000000) { tier = 'Platinum';…
  3. } else if (revenue >= 100000) { tier = 'Gold';…
  4. } else { tier = 'Standard';…

Paso 1 de 4

revenue == null es false con revenue = 250.000: se baja a la siguiente.

Una cadena de else if es un Decision con salidas ordenadas: la primera condición verdadera gana y el resto se salta. Elige una facturación y reprodúcelo paso a paso.
Apex
// ❌ 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';
}
Con rangos numéricos, empieza siempre por el más alto.

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 &&.

Apex
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');
}
Si opp.Amount es null, && ni siquiera evalúa la segunda parte.
En FlowEn Apex
Elemento Decisionif / else if / else
Condición de una salida(amount >= 100000)
«All conditions are met»&&
«Any condition is met»||
Salida por defectoelse

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

Vuelvo de la reunión de Northwind y esto es lo que pidieron, regla por regla: «Queremos que el sistema decida solo: el nivel de servicio de cada cuenta según lo que factura; en cuántas horas se responde cada caso según su prioridad; quién aprueba cada renovación y si pasa por Legal; cuántos meses faltan para el objetivo; el resumen del pipeline del lunes; cuál es el primer caso urgente de la cola; qué leads de la feria son de clientes que ya tenemos; y la revisión trimestral con todo eso junto». Yo, como Admin, lo habría intentado con reglas de validación, fórmulas y Flows repartidos por la org. Aquí va todo en código, y la primera regla es la de hoy.