Apex Academy
Módulo 2·03·18 min

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 Admin esCampo fórmula (calcula) frente a elemento de Flow (actúa)

✓ En esta sub-lección

  1. 01Distinguir una expresión de una sentencia y saber dónde puede ir cada una.
  2. 02Elegir entre el operador condicional y un if según haya que elegir un valor o una acción.
  3. 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

Así lo separé yo en la cabeza: un campo fórmula nunca hace nada, solo calcula y devuelve un valor. Un elemento de Flow (Assignment, Update Records) no devuelve nada que puedas pegar en otra fórmula: actúa. En Apex, lo primero se llama expresión y lo segundo sentencia.

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.

Apex
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 suelta
Una expresión suelta no es una orden: Apex no sabe qué hacer con el valor.

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

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

  1. Decimal amount = 80000;
  2. String approver;
  3. if (amount >= 50000) {
  4. String note = 'Revisión legal';
  5. approver = 'Director';
  6. }
  7. System.debug(approver);
  8. System.debug(note);
VARIABLES VIVASamountapprovernote

Paso 1 de 8

amount nace en el bloque de fuera: vivirá hasta el final.

Desde dentro se ve lo de fuera; desde fuera no se ve lo de dentro.
Apex
// ❌ 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);