Switch Statement
Cuando la pregunta es «¿qué valor tiene este picklist?», switch lo resuelve con una salida por valor.
✓ En esta sub-lección
- 01Escribir un switch on con varias ramas when, valores agrupados y when else.
- 02Elegir entre switch e if según sea una pregunta de valor exacto o de rango.
- 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
Anatomía de un switch
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';
}
}- 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.
when 'Phone'→ Soporte telefónicowhen 'Email', 'Web'→ Soporte digitalwhen null→ Revisión manualwhen 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.
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 || |
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');
}
}