Con un bucle while, puedes ejecutar código repetidamente siempre que se cumpla cierta 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 que se haya ejecutado el cuerpo del bucle. Esto es útil cuando la condición depende de evaluaciones que se hacen 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 salir del bucle por completo.
En cambio, la palabra clave continue solo detiene la ejecución de la iteración actual y continúa con la siguiente.
Con continue, a menudo puedes evitar 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.
}
Además del condicional, JavaScript también tiene una sentencia switch para ejecutar lógica de forma condicional.
Se usa cuando una sola variable necesita compararse con múltiples variantes.
La comparación se hace comprobando la igualdad estricta (===), consulta el concepto de comparación.
Para una variable x, la sentencia switch en 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 en caso de que quieras ejecutar algún código si ninguna de las otras opciones coincide con la variable.
Las sentencias break anteriores son necesarias porque, de forma predeterminada, todos los casos son «fallthrough» en JavaScript.
Eso significa que, sin ninguna sentencia break, se ejecutaría todo el código de los casos que están debajo de la primera opción que coincida, aunque x no coincidiera con esas opciones.
Este comportamiento predeterminado de «fallthrough» es una trampa común al usar 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 tiene un bar de jugos donde vende deliciosos jugos de frutas mixtas. Eres un cliente frecuente de su local y te diste cuenta de que podrías hacerle la vida más fácil a tu amiga. Decides usar tus habilidades de programación para ayudarle a Li Mei con su trabajo.
A Li Mei le gusta decirles a sus clientes de antemano cuánto tienen que esperar por un jugo del menú que pidieron.
Le cuesta recordar los números exactos porque el tiempo que se tarda en mezclar los jugos 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, las 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 jugo del menú como argumento y devuelva la cantidad de minutos que se tarda en mezclar 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, necesita asegurarse de que el recipiente de gajos de lima esté lleno para el resto del día.
Implementa la función limesToCut, que recibe la cantidad de gajos de lima que Li Mei necesita cortar y un array que representa el suministro de limas enteras que tiene a la mano.
Puede obtener 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 alcanzar la cantidad de gajos que necesita o hasta que se le acaben las limas.
A Li Mei le gustaría saber de antemano cuántas limas necesita cortar.
La función limesToCut debe devolver la cantidad 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 ya se pidieron pero que aún no están preparadas cuando termina el turno de Li Mei. Dmitry entonces prepara los jugos restantes.
Para facilitar el cambio de turno, implementa una función remainingOrders, que recibe la cantidad de minutos que quedan en el turno de Li Mei y un array de jugos que se pidieron pero que aún no están preparados.
La función debe devolver los pedidos que Li Mei no puede empezar a preparar antes del final de su jornada laboral.
El tiempo restante del turno siempre será mayor que 0. El array de jugos por 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 mezclar un jugo, siempre lo termina, aunque tenga que trabajar un poco más. Si no queda ningún pedido del 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.