While Loop
Repetir mientras algo siga siendo cierto: el bucle para cuando no sabes de antemano cuántas vueltas harán falta.
✓ En esta sub-lección
- 01Escribir un while que se detenga solo porque su cuerpo acerca la condición a false.
- 02Distinguir while de do-while y saber cuándo el cuerpo se ejecuta al menos una vez.
- 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
Anatomía de un while
Decimal debt = 10000;
Decimal installment = 1500;
Integer payments = 0;
while (debt > 0) {
debt = debt - installment;
payments++;
}
System.debug(payments); // 7La 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.
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.
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.
Integer retries = 5;
do {
retries++;
} while (retries < 3);
System.debug(retries); // 6: entró una vez aunque 5 < 3 es false| Bucle | Comprueba… | Vueltas mínimas |
|---|---|---|
| while | antes de cada vuelta | 0 |
| do-while | después de cada vuelta | 1 |