Com um ciclo while, podes executar código repetidamente enquanto uma determinada condição se verificar.
Escreve-se com a palavra-chave while seguida de uma condição entre parênteses e de um bloco de código que contém o corpo do ciclo, delimitado por chavetas.
while (condition) {
// code that is executed repeatedly as long as the condition is true
}
O JavaScript também tem um ciclo do-while. Aqui, a condição é verificada depois de o corpo do ciclo ser executado. Isto é útil quando a condição depende de avaliações feitas no corpo.
do {
// The code here will always be executed once and then
// repeatedly while the condition is true.
} while (condition);
Dentro do corpo de um ciclo, podes usar a palavra-chave break para interromper completamente a execução do ciclo.
Em contraste, a palavra-chave continue apenas interrompe a execução da iteração atual e continua para a seguinte.
Com o continue, podes muitas vezes evitar envolver grandes partes do corpo do ciclo numa 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.
}
Além da condicional, o JavaScript também tem uma instrução switch para executar lógica condicionalmente.
É usada quando é preciso comparar uma única variável com várias alternativas.
A comparação é feita através da verificação de igualdade estrita (===), vê comparação de conceitos.
Para uma variável x, a instrução switch em JavaScript tem a seguinte sintaxe.
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
}
O caso default é opcional e é usado caso queiras executar algum código se nenhuma das outras opções corresponder à variável.
As instruções break acima são necessárias porque, por predefinição, todos os casos são "fallthrough" em JavaScript.
Isso significa que, sem qualquer break, todo o código nos casos abaixo da primeira opção correspondente seria executado, mesmo que x não correspondesse a essas opções.
Este comportamento de "fallthrough" por predefinição é uma armadilha comum quando usas switch em JavaScript.
Dentro de uma função, também podes usar return em vez de break para evitar este problema.
A tua amiga Li Mei tem um bar de sumos onde vende deliciosos sumos de fruta misturados. És um cliente frequente na loja dela e apercebeste-te de que podias facilitar a vida à tua amiga. Decides usar os teus conhecimentos de programação para ajudar a Li Mei no trabalho dela.
A Li Mei gosta de avisar os clientes, com antecedência, de quanto tempo têm de esperar pelo sumo que encomendaram do menu.
Tem dificuldade em memorizar os números exatos, porque o tempo de mistura dos sumos varia.
'Pure Strawberry Joy' demora 0,5 minutos, 'Energizer' e 'Green Garden' demoram 1,5 minutos cada, 'Tropical Island' demora 3 minutos e 'All or Nothing' demora 5 minutos.
Para todas as outras bebidas (por exemplo, promoções especiais) podes assumir um tempo de preparação de 2,5 minutos.
Para ajudares a tua amiga, escreve uma função timeToMixJuice que recebe um sumo do menu como argumento e devolve o número de minutos que demora a misturar essa bebida.
timeToMixJuice('Tropical Island');
// => 3
timeToMixJuice('Berries & Lime');
// => 2.5
Muitas das criações da Li Mei levam gomos de lima, seja como ingrediente, seja como parte da decoração. Por isso, quando começa o turno de manhã, tem de garantir que o recipiente dos gomos de lima está cheio para o resto do dia.
Implementa a função limesToCut, que recebe o número de gomos de lima que a Li Mei precisa de cortar e um array que representa as limas inteiras que tem à mão.
Consegue obter 6 gomos de uma lima 'small', 8 gomos de uma lima 'medium' e 10 de uma lima 'large'.
Corta sempre as limas pela ordem em que aparecem na lista, começando pelo primeiro item.
Continua até atingir o número de gomos de que precisa ou até ficar sem limas.
A Li Mei gostaria de saber antecipadamente quantas limas precisa de cortar.
A função limesToCut deve devolver o número de limas a cortar.
limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4
A Li Mei trabalha sempre até às 15 horas. Depois, é o seu funcionário Dmitry que assume o turno. Muitas vezes há bebidas que já foram encomendadas mas ainda não estão preparadas quando o turno da Li Mei termina. O Dmitry prepara então os sumos que faltam.
Para facilitar a passagem de turno, implementa uma função remainingOrders, que recebe o número de minutos que faltam para o fim do turno da Li Mei e um array de sumos que já foram encomendados mas ainda não estão preparados.
A função deve devolver os pedidos que a Li Mei não consegue começar a preparar antes do fim do seu dia de trabalho.
O tempo que falta para o fim do turno será sempre maior do que 0. O array de sumos a preparar nunca estará vazio. Além disso, os pedidos são preparados pela ordem em que aparecem no array. Se a Li Mei começa a misturar um determinado sumo, acaba-o sempre, mesmo que tenha de trabalhar um pouco mais. Se não sobrarem pedidos de que o Dmitry tenha de tratar, deve ser devolvido um array vazio.
remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.