jueves, 30 de diciembre de 2021

Office Scripts: Bucles WHILE y DO ... WHILE

Vamos con la segunda entrada de sentencias de control fundamentales para trabajar con Office Scripts, y hablamos de los bucles WHILE y DO ... WHILE.
El primer bucle WHILE ejecuta un bloque de código mientras una condición determinada sea verdadera, i.e., se detendrá cuando la condición sea falsa.
Su sintáxis es sencilla:
while (Condición_Prueba Lógica)
{
// nuestro código a procesar
}


El segundo bucle DO ... WHILE ejecutará un bloque de código una vez, y luego repetirá el ciclo mientras la condición se mantenga verdadera.:
do
{
// nuestro código a procesar
} while (Condición_Prueba Lógica);


Y podrías decirme... no veo la diferencia.
Bueno, la diferencia entre uno y otro es que en el bucle DO...WHILE, el bloque a procesar siempre se ejecuta, al menos, una vez. Sin embargo con WHILE podría ocurrir que si el primer paso del bucle nis siquiera cumpliera la condición dada, NO se ejecutara nada...
Interesante...

Veamos un par de ejemplos...
En el primer ejemplo recorremos valores impares mientras que el valor devuelto sea inferior a 10:
function main(workbook: ExcelScript.Workbook) {
  // mostramos impares de 1 al 10
  // definimos variables
  let i = 1, limite = 10;

  // bucle while de 1 a 10
  while (i <= limite) 
  {
    console.log(i);
    i +=2;
  }
}

El bucle empieza en 1, y va incrementando el valor de 2 en 2, mientras/while el valor devuelto sea inferior a 10.
Office Scripts: Bucles WHILE y DO ... WHILE


Un segundo ejemplo con el bucle DO ... WHILE
function main(workbook: ExcelScript.Workbook)
{
  let i=1, limite=10;
  do 
  {
    console.log(i);
    i ++
  } while (i<=limite);
}

El bucle empieza en 1, y va incrementando el valor de 1 en 1, mientras el valor devuelto sea inferior a 10.

Veamos un ejemplo donde lanzamos un primer bucle WHILE y a continuación uno DO..WHILE similar (con igual condición) pero con resultados algo distintos...
 function main(workbook: ExcelScript.Workbook)
{
// diferencias entre WHILE y DO .. WHILE
let i=1, limite=4;
//1ro WHILE
while (i>2 && i<=limite)
  {
  console.log("bucle while " + i);
    i ++
  }

let j = 1, limite2 = 4;
//2do DO...WHILE
do 
{
  console.log("bucle do...while " + j);
  j++
} while (j > 2 && j<=limite2);
}

Al lanzar este Script vemos como solo se ejecuta el primer intento del bucle DO..WHILE!!.
El motivo, lo ya comentado.
WHILE escapa del bucle en el momento que no se cumple la condición; por tanto, en el ejemplo previo, al asignar i=1 como primer intento y NO cumplir con la condición dada (valor entre 2 y 4) sale del bucle...
Sin emabrgo, DO...WHILE si ejecuta el primer bloque... y solo después evalúa la condición, y al no cumplirla escapa del bucle.

En realidad este comportamiento es el habitual en todos los lenguajes de programación ;-)

Veamos un último ejemplo donde obtendremos un acumulado de celdas hasta cumplir que sobrepasamos el total de 250:
function main(workbook: ExcelScript.Workbook)
{
  let Acum =0;
  let fila =0; 
  let Hoja = workbook.getActiveWorksheet();
  let numero = Hoja.getCell(0,fila).getValues();
  
  do
  {
    Acum += +numero;
    fila ++;
    numero= (Hoja.getCell(fila,0).getValues());
  } while (Acum <= 250 && fila<=9) 

  // mostramos el acumulado
  console.log(`El acumulado es ${Acum}.`);
}

Office Scripts: Bucles WHILE y DO ... WHILE

Comprobamos como con nuestro bucle vamos recorriendo celdas de nuestra hoja, y acumulando valores, mientras que el total sea inferior a 250.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.