while
Con un bucle while, puedes ejecutar código de forma repetida siempre que se cumpla una condición.
Se escribe con la palabra clave while, seguida de una condición entre paréntesis y un bloque de código que contiene el cuerpo del bucle entre llaves.
while (condition) {
// code that is executed repeatedly as long as the condition is true
}
JavaScript también tiene un bucle do-while.
Aquí la condición se comprueba después de ejecutar el cuerpo del bucle.
Esto es útil cuando la condición depende de evaluaciones realizadas en el cuerpo.
do {
// The code here will always be executed once and then
// repeatedly while the condition is true.
} while (condition);
Dentro del cuerpo de un bucle, puedes usar la palabra clave break para detener por completo la ejecución del bucle.
En cambio, la palabra clave continue solo detiene la ejecución de la iteración actual y continúa con la siguiente.
Con continue puedes evitar a menudo envolver grandes partes del cuerpo del bucle en un condicional.
let i = 0;
while (i < 100) {
i = i + 2;
if (i % 3 === 0) {
continue;
}
// The code here will only be executed when i was not divisible
// by 3 in the check above.
}
switch
Además del condicional, JavaScript también tiene la sentencia switch para ejecutar lógica de forma condicional.
Se usa cuando hay que comparar una sola variable con varias alternativas.
La comparación se hace comprobando la igualdad estricta (===); consulta el concepto de comparación.
Para cierta variable x, la sentencia switch de JavaScript tiene la siguiente sintaxis.
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the options
}
El caso default es opcional y se usa si quieres ejecutar algo de código cuando ninguna de las otras opciones coincide con la variable.
Las sentencias break anteriores son necesarias porque, de forma predeterminada, en JavaScript todos los casos pasan al siguiente.
Eso significa que, sin una sentencia break, se ejecutaría todo el código de los casos que hay por debajo de la primera opción que coincida, aunque x no coincidiera con esas opciones.
Este comportamiento de paso al siguiente caso de forma predeterminada es una trampa habitual cuando se usa switch en JavaScript.
Dentro de una función, también se puede usar return en lugar de break para evitar este problema.
Tu amiga Li Mei regenta un bar de zumos donde vende deliciosos zumos de frutas. Eres cliente habitual de su tienda y te has dado cuenta de que podrías hacerle la vida más fácil a tu amiga. Decides usar tus habilidades de programación para ayudar a Li Mei con su trabajo.
A Li Mei le gusta decirles a sus clientes de antemano cuánto tienen que esperar por un zumo del menú que han pedido.
Le cuesta recordar las cifras exactas porque el tiempo que se tarda en preparar los zumos varía.
'Pure Strawberry Joy' tarda 0,5 minutos, 'Energizer' y 'Green Garden' tardan 1,5 minutos cada uno, 'Tropical Island' tarda 3 minutos y 'All or Nothing' tarda 5 minutos.
Para todas las demás bebidas (por ejemplo, ofertas especiales) puedes suponer un tiempo de preparación de 2,5 minutos.
Para ayudar a tu amiga, escribe una función timeToMixJuice que reciba un zumo del menú como argumento y devuelva el número de minutos que se tarda en preparar esa bebida.
timeToMixJuice('Tropical Island');
// => 3
timeToMixJuice('Berries & Lime');
// => 2.5
Muchas de las creaciones de Li Mei incluyen gajos de lima, ya sea como ingrediente o como parte de la decoración. Así que cuando empieza su turno por la mañana, tiene que asegurarse de que el recipiente de gajos de lima esté lleno para el resto del día.
Implementa la función limesToCut, que recibe el número de gajos de lima que Li Mei tiene que cortar y un array que representa la reserva de limas enteras que tiene a mano.
Puede sacar 6 gajos de una lima 'small', 8 gajos de una lima 'medium' y 10 de una lima 'large'.
Siempre corta las limas en el orden en que aparecen en el array, empezando por el primer elemento.
Sigue cortando hasta que alcanza el número de gajos que necesita o hasta que se queda sin limas.
A Li Mei le gustaría saber de antemano cuántas limas tiene que cortar.
La función limesToCut debe devolver el número de limas que hay que cortar.
limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4
Li Mei siempre trabaja hasta las 3 de la tarde. Después, su empleado Dmitry toma el relevo. A menudo hay bebidas que se han pedido pero que aún no están preparadas cuando termina el turno de Li Mei. Entonces Dmitry prepara los zumos restantes.
Para facilitar el cambio de turno, implementa una función remainingOrders, que recibe el número de minutos que quedan en el turno de Li Mei y un array de zumos que se han pedido pero que aún no se han preparado.
La función debe devolver los pedidos que Li Mei no puede empezar a preparar antes de que termine su jornada laboral.
El tiempo que queda de turno siempre será mayor que 0. El array de zumos que hay que preparar nunca estará vacío. Además, los pedidos se preparan en el orden en que aparecen en el array. Si Li Mei empieza a preparar un zumo determinado, siempre lo termina, aunque tenga que trabajar un poco más. Si no quedan pedidos de los que Dmitry tenga que encargarse, se debe devolver un array vacío.
remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.