Bruno R

Looping code (bucles)

x
portfolio-next-l5vb64p5k-bandikyu.vercel.app

Los bucles (looping) son un concepto utilizado en programacion para referise a hacer una misma tarea varias veces, cada vez que temina un bucle se dice que se realizo una iteracion (si se repite el mismo bucle 40 veces por ejemplo, esto seria lo mismo que decir que el bucle itero 40 veces)

Los bucles suelen tener una de las siguientes caracteristicas ⇒

Un
Una
Un

en pseudocodigo seria algo asi ⇒

loop(food = 0; foodNeeded = 10) { // la primer sentencia seria el contador con un valor de inicio y la segunda sentencia seria la condicional de hasta que numero necesito que llegue el contador para que no se repita
  if (food >= foodNeeded) { //esta es una condicion q cuando el contador sea igual o mayor que la condicional ejecuta el codigo del if
    exit loop;
    // We have enough food; let's go home
  } else { //y aca hay algo re interesante, el iterador que aumenta el valor del contador esta en un else, no necesariamente tiene que esta en los parentesis del loop
    food += 2; // Spend an hour collecting 2 more food
    // loop will then run again
  }
}

El estandar para los bucle

Bucle for ⇒

for (initializer; condition; final-expression) {
  // code to run
}
Comienza con la palabra clave
Luego dentro del parentesis hay tres elementos separados por punto y coma ⇒
Y luego estan las llaves, dentro de estas esta el bloque de codigo que se ejecutara cada vez que el bucle se repita.

Ejemplo practico

const cats = ['Bill', 'Jeff', 'Pete', 'Biggles', 'Jasmin']; //un array con distintos valores
let info = 'My cats are called '; // una variable string
const para = document.querySelector('p'); //un selector de parrafor para colocar la info seguro
/*abajo el bucle basicamente esta creando una variable, esta variable no puede ser mayor
que el numero de elementos del array, y se incrementa en 1 por cada iteracion.
luego hay un operador de asignacion que agregara al string cada uno de los elementos
del array en cada iteracion + una coma*/
for (let i = 0; i < cats.length; i++) {
  info += cats[i] + ', ';
}
//como resultado sera un string en la variable info donde se sumaron todos los elementos
//del array a la variable.
para.textContent = info;

Como añadidura se puede corregir el string que termina con una "," y un espacio usando condicionales ⇒

for (let i = 0; i < cats.length; i++) { //esto va a iterar igual que antes
  if (i === cats.length - 1) { // si i es identico al numero de elementos del array -1
    info += 'and ' + cats[i] + '.'; //se concatena esto para que quede re tull
  } else {
    info += cats[i] + ', '; // este else se va a ejecutar todas las iteraciones menos la ultima
  }                         //lo mismo que el ejemplo anterior.
} 
// output => "Mis gatos se llaman Bill, Jeff, Pete, Biggles and Jasmin."

Salir del bucle con break

<label for="search">Search by contact name: </label>
<input id="search" type="text">
<button>Search</button>

<p></p>
const contacts = ['Chris:2232322', 'Sarah:3453456', 'Bill:7654322', 'Mary:9998769', 'Dianne:9384975'];
const para = document.querySelector('p');
const input = document.querySelector('input');
const btn = document.querySelector('button');

btn.addEventListener('click', function() {
  let searchName = input.value.toLowerCase();
  input.value = '';
  input.focus();
  for (let i = 0; i < contacts.length; i++) {
    let splitContact = contacts[i].split(':');
    if (splitContact[0].toLowerCase() === searchName) {
      para.textContent = splitContact[0] + '\'s number is ' + splitContact[1] + '.';
      break; //mas abajo voy a tratar de desglosar la importancia del break aca.
    } else if (i === contacts.length - 1) {
      para.textContent = 'Contact not found.';
    }
  }
});

Omitir iteraciones con continuar continue

continue funciona de manera similar a break pero en lugar de salir del bucle, este salta a la proxima iteracion.

let num = input.value; //creando variable

for (let i = 1; i <= num; i++) { //se repite el numero que coloquemos en el input de la variable
  let sqRoot = Math.sqrt(i); //variable que toma el valor de la raiz cuadrada de i del bucle
  if (Math.floor(sqRoot) !== sqRoot) { //si el redondeo de la raiz cuadrada es diferente a la raiz cuadrada saltara la iteracion, osea el bucle seguira con el proximo valor de i
    continue;
  }
//en el caso de que no se cumpla esta condicion saltamos a agregar la informacion de i al parrafo
  para.textContent += i + ' ';
} //esto me va a mostrar todos los valores que tengan raiz cuadrada hasta llegar al numero que coloque en el input

Mientras y hacer mientras (while y do...while)

while loop tiene las mismas caracteristicas que el bucle for pero estan dispuestas de manera distinta ⇒

let i = 0; //la variable inicializadora se encuentra fuera del bucle

while (i < cats.length) { //dentro de los parentesis esta solo la condicion para que se siga ejecutando o no el bucle
  if (i === cats.length - 1) {
    info += 'and ' + cats[i] + '.'; //el bloque del codigo normal que se ejecuta si se cumple la condicion del bucle
  } else {
    info += cats[i] + ', ';
  }

  i++; //y el incrementador esta dentro del bloque del bucle pero en la ultima linea
} //este le da info a la variable que se encuentra en la condicional para saber si se repite o no el codigo.

Luego el bucle do...while proporciona una variacion al bucle while ⇒

let i = 0; //inicializador fuera del bucle

do { //palabra calave do que inicia el bloque de codigo abajo
  if (i === cats.length - 1) {
    info += 'and ' + cats[i] + '.'; //este bloque si o si corre al menos una vez
  } else {
    info += cats[i] + ', ';
  }

  i++; //este incrementador tambien se va a iniciar al menos una vez por estar dentro de do
} while (i < cats.length); //la condicion corre a lo ultimo de la iteracion