Apex Academy
Módulo 2·02·16 min

Switch Statement

Cuando la pregunta es «¿qué valor tiene este picklist?», switch lo resuelve con una salida por valor.

En Admin esUn Decision con una salida por cada valor de un picklist

✓ En esta sub-lección

  1. 01Escribir un switch on con varias ramas when, valores agrupados y when else.
  2. 02Elegir entre switch e if según sea una pregunta de valor exacto o de rango.
  3. 03Tratar el valor vacío y las mayúsculas, que en switch sí importan.

La nutria: ¿Te acuerdas? · Repaso de la lección 1

En una cadena if / else if / else, si dos condiciones son verdaderas, ¿qué rama se ejecuta?

Muchas decisiones de negocio no son «¿es mayor que?», sino «¿cuál de estos valores es?»: el origen de un caso, la etapa de una oportunidad, el sector de una cuenta. Para eso una cadena de else if funciona, pero switch lo dice más claro.

La nutria: El paralelo de Admin

Yo hice mil veces este Decision sobre Case.Origin: una salida para Phone, otra para Email y Web juntos, y la salida por defecto para lo demás. Cada salida compara el mismo campo con un valor distinto del picklist. switch es exactamente eso: nombras el campo una vez y listas los valores.

Anatomía de un switch

Apex
Case support = new Case(Subject = 'No puedo entrar', Origin = 'Email');
String queueName;

switch on support.Origin {
    when 'Phone' {
        queueName = 'Soporte telefónico';
    }
    when 'Email', 'Web' {
        queueName = 'Soporte digital';
    }
    when null {
        queueName = 'Revisión manual';
    }
    when else {
        queueName = 'Soporte general';
    }
}
switch on + lo que se evalúa; cada when es una salida; when else es la salida por defecto y va siempre la última.
  • Varios valores en una rama se separan con comas: when 'Email', 'Web'.
  • when null recoge el campo vacío. Sin esa rama, un null cae en when else; no lanza ninguna excepción.
  • Solo se ejecuta una rama y no hace falta ninguna palabra para «salir»: al terminar la rama, el switch termina.
  • Un mismo valor no puede aparecer en dos ramas: Apex no lo deja compilar.
c.Origin =
switch on c.Origin {
  1. when 'Phone'→ Soporte telefónico
  2. when 'Email', 'Web'→ Soporte digital
  3. when null→ Revisión manual
  4. when else→ Soporte general

Cola: Soporte digital. Un when admite varios valores separados por comas: 'Email' y 'Web' van a la misma cola sin repetir código.

switch evalúa el campo una sola vez y lo reparte a la salida de su valor. Cambia el valor de c.Origin y mira qué rama se ilumina.

Qué puede ir en un when

Los valores de un when tienen que ser fijos y escritos tal cual: 'Phone', 3, null. No valen rangos ni condiciones como amount > 1000. Por eso switch sirve para Strings (picklists), Integer y Long, pero la pregunta «¿está entre 10.000 y 100.000?» sigue siendo trabajo de if.

La pregunta es…Usa
¿Qué valor del picklist tiene?switch
¿Es mayor, menor o está entre dos números?if / else if
¿Se cumplen varias cosas a la vez?if con && o ||
Apex
String answer = 'sí';            // escrito a mano por un usuario
switch on answer.toUpperCase() {
    when 'SÍ', 'SI' {
        System.debug('Acepta');
    }
    when else {
        System.debug('No acepta');
    }
}