Expresiones vs Sentencias
Una expresión calcula un valor, como un campo fórmula. Una sentencia hace algo, como un elemento de Flow. Y cada variable vive solo dentro de sus llaves.
✓ En esta sub-lección
- 01Distinguir una expresión de una sentencia y saber dónde puede ir cada una.
- 02Elegir entre el operador condicional y un if según haya que elegir un valor o una acción.
- 03Declarar cada variable en el ámbito correcto para poder usarla donde la necesitas.
La nutria: ¿Te acuerdas? · Repaso de la lección 2
En un switch, ¿qué rama recoge los valores del picklist que no tienen su propio when?
Ahora que tu código tiene ramas, aparecen dos preguntas que antes no importaban: ¿esto que escribo da un valor o hace algo? y ¿hasta dónde llega esta variable? Las dos tienen respuesta sencilla, y las dos explican la mayoría de errores de compilación de este módulo.
La nutria: El paralelo de Admin
Expresión: algo que vale algo
Una expresión es cualquier trozo de código que, al evaluarse, da un valor: amount * 1.21, stage == 'Closed Won', name.trim(), isVip && amount > 1000. Puedes ponerla a la derecha de un =, dentro de un paréntesis de if, o como argumento de un método.
Sentencia: una orden completa
Una sentencia es una instrucción completa: declarar, asignar, llamar a System.debug, un if entero. Las sentencias simples terminan en punto y coma; las que llevan un bloque, como if o switch, terminan en su llave de cierre. Casi todas las sentencias llevan expresiones dentro.
Decimal total = amount * 1.21; // sentencia (con la expresión amount * 1.21 dentro)
System.debug(total); // sentencia
amount > 1000 // expresión sola: no compila como línea sueltaElegir un valor o elegir una acción
Aquí la diferencia se vuelve práctica. El operador condicional que viste en Operadores (condición ? a : b) es una expresión: elige un valor. if es una sentencia: elige qué hacer. Si lo único que cambia entre las dos ramas es el valor que asignas, el operador condicional lo dice en una línea. Si cambian las acciones, usa if.
// Solo cambia el valor → expresión
String approver = amount >= 50000 ? 'Director' : 'Jefe de equipo';
// Cambian las acciones → sentencia
if (amount >= 50000) {
System.debug('Pedir aprobación');
requiresLegal = true;
} else {
System.debug('Aprobación automática');
}Ámbito: cada variable vive dentro de sus llaves
Una variable existe desde la línea en que se declara hasta la llave que cierra el donde se declaró. Esa zona es su . Declarada dentro de un if, desaparece al cerrarse el if, y usarla después es un error de compilación. La solución es declararla antes, fuera, y solo asignarla dentro.
- Decimal amount = 80000;
- String approver;
- if (amount >= 50000) {
- String note = 'Revisión legal';
- approver = 'Director';
- }
- System.debug(approver);
- System.debug(note);
Paso 1 de 8
amount nace en el bloque de fuera: vivirá hasta el final.
// ❌ approver solo existe dentro de cada rama
if (amount >= 50000) {
String approver = 'Director';
} else {
String approver = 'Jefe de equipo';
}
System.debug(approver); // no compila: aquí approver no existe
// ✅ se declara fuera y se asigna dentro
String approver;
if (amount >= 50000) {
approver = 'Director';
} else {
approver = 'Jefe de equipo';
}
System.debug(approver);