Apex Academy
Módulo 2·04·18 min

While Loop

Repetir mientras algo siga siendo cierto: el bucle para cuando no sabes de antemano cuántas vueltas harán falta.

En Admin esUn conector de Flow que vuelve atrás a un Decision

✓ En esta sub-lección

  1. 01Escribir un while que se detenga solo porque su cuerpo acerca la condición a false.
  2. 02Distinguir while de do-while y saber cuándo el cuerpo se ejecuta al menos una vez.
  3. 03Proteger un bucle con un tope para que un dato inesperado no lo vuelva infinito.

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

¿Cuál de estas líneas es una expresión (calcula un valor) y no una sentencia?

Hasta ahora cada línea se ejecutaba como mucho una vez. Un bucle repite un bloque. while es el más sencillo: «mientras la condición sea cierta, vuelve a hacer esto». Es el bucle para cuando no sabes cuántas vueltas hacen falta, solo cuándo parar.

La nutria: El paralelo de Admin

En Flow yo conectaba un elemento de vuelta a un Decision anterior: Decision → Assignment → otra vez el Decision, hasta que el Decision mandaba por la salida de «terminado». Ese circuito es un while. El Decision es la condición y lo que hay en el circuito es el cuerpo del bucle.

Anatomía de un while

Apex
Decimal debt = 10000;
Decimal installment = 1500;
Integer payments = 0;

while (debt > 0) {
    debt = debt - installment;
    payments++;
}
System.debug(payments);   // 7
payments++ suma 1 a payments. Es el atajo de payments = payments + 1.

La condición se comprueba antes de cada vuelta, o . Si es true, se ejecuta el bloque entero y se vuelve a comprobar. En cuanto es false, el código sigue debajo del bucle. Si ya era false la primera vez, el cuerpo no se ejecuta ni una vez.

while (balance > 0) { balance -= 300; months++; }

balance

1000

months

0

↻ Condición true: otra vuelta

Paso 1 de 5

Antes de la primera vuelta se COMPRUEBA: 1000 > 0 es true, así que entra.

Comprobar, ejecutar, volver: el ciclo se rompe solo cuando la condición da false.

La regla de oro: el cuerpo tiene que acercar el final

Algo dentro del bucle tiene que cambiar lo que mira la condición. Si nada lo cambia, la condición sigue siendo true para siempre: un . En Salesforce eso no cuelga la org, pero la transacción se corta con «Apex CPU time limit exceeded» cuando agota su , y lo que el usuario intentaba guardar se pierde.

Apex
Integer attempts = 0;
while (attempts < 3) {
    System.debug('Intento');
    // ❌ falta attempts++: attempts vale 0 para siempre
}

do-while: al menos una vez

do { … } while (condición); pone la comprobación al final. El cuerpo se ejecuta una vez antes de preguntar nada, así que siempre hace al menos una vuelta. Fíjate en el punto y coma tras el paréntesis: es de los pocos sitios donde un bloque lo lleva.

Apex
Integer retries = 5;
do {
    retries++;
} while (retries < 3);
System.debug(retries);   // 6: entró una vez aunque 5 < 3 es false
BucleComprueba…Vueltas mínimas
whileantes de cada vuelta0
do-whiledespués de cada vuelta1