Repetições

De novo!

Digamos que você tem uma lista de preços e quer descobrir o total dela. Como faria?

let precos = [24.99, 9.99, 11.99, 69.90]

Talvez assim:

let precos = [24.99, 9.99, 11.99, 69.90]
console.log(precos[0] + precos[1] + precos[2] + precos[3])
> 116.87

Funcionou. Mas o que acontece se você decidir que quer comprar mais alguma coisa?

let precos = [24.99, 9.99, 11.99, 69.90]
precos.push(8.50)
console.log(precos)
console.log(precos[0] + precos[1] + precos[2] + precos[3])
> [24.99, 9.99, 11.99, 69.9, 8.5] > 116.87

Agora tem uma coisa a mais na lista, mas o resultado foi o mesmo. :(

É claro que dá para adaptar o código:

let precos = [24.99, 9.99, 11.99, 69.90]
precos.push(8.50)
console.log(precos[0] + precos[1] + precos[2] + precos[3] + precos[4])
> 125.37

Porém seria mais conveniente se existisse um pedaço de código que funcionasse sempre.

let precos = [24.99, 9.99, 11.99, 69.90, 8.50]
let total = 0
for (const valor of precos) {
	total = total + valor
}
console.log(total)
> 125.37

Olha só, tem mesmo! Até parece que eu sabia que ele existia esse tempo todo.

Eu sei, tem muita coisa acontecendo aí. A parte essencial é essa:

for (const valor of precos) {

}

for e of são mais 2 palavras especiais.

Usando esse código, qualquer instrução entre as {chaves} (ou seja, no bloco de código) é repetida uma vez por item na lista.

let letras = ["a", "b", "c"]
for (const valor of letras) {
	// 3 vezes
	console.log("De novo!")
}
> "De novo!" > "De novo!" > "De novo!"

Esse const valor é algo que você já viu: esse código cria uma variável chamada valor.

Cada vez que o código interior executa, a variável criada contém um item da lista, em ordem. Você pode escolher o nome dela.

let sequencia = [0, 1, 2, 3]
for (const numero of sequencia) {
	console.log(numero)
}
> 0 > 1 > 2 > 3

Você também já viu que total = total + valor soma o valor à variável total. Como esse pedaço do código está entre as chaves, ele executa com a lista toda, somando toda a lista no total.


Veja uma versão um pouco diferente que mostra o total sendo calculado:

let precos = [24.99, 9.99, 11.99, 69.90, 8.50]
let total = 0
for (const valor of precos) {
	total = total + valor
	console.log(total)
}
> 24.99 > 34.98 > 46.97 > 116.87 > 125.37

E então, qual valor esse código mostra na tela?

let resultado = 100
for (const v of [40, 10, 10]) {
	resultado = resultado - v
}
console.log(resultado)