1
0
Fork 0
iprog5750/JS-Padroes-para-loops.md

187 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

2024-04-15 19:03:50 +02:00
[Índice](README.md)
# Padrões para loops
2024-04-15 20:20:38 +02:00
## ![Maguinho](img/mago-64px.png) Loop infinito
2024-04-15 19:03:50 +02:00
Para fazer um loop infinito podemos usar um bloco controlado por `while` ou `for`.
- `while`
Para fazer o bloco executar infinitamente escrevemos uma condição que sempre retorna `true`.
```js
while(1<2) {
/*
e aqui vai o código...
*/
}
```
Ou, simplesmente, colocamos `true` como valor a ser avaliado pelo `while`. Essa é a forma mais utilizada.
```js
while(true) {
// ...
}
```
- `for`
Uma forma compacta de criar um loop infinito com `for` é:
```js
for(;;) {
/*
código vai aqui...
*/
}
```
Loops infinitos não são usados necessariamente para escrever código que deve rodar infinitamente. Aliás, não estamos achando que, de verdade, o código vai ficar executando até o final dos tempos. A ideia é mais tipo "se nenhuma instrução do programa ou evento externo ocorrer, forçando a interrupção do loop (ou do programa todo) então o código continuará sendo executado".
### Interrompendo um loop infinito
Um loop infinito pode ser interrompido ou, rompido, já que *loop* significa *laço* e laços são rompidos.
Para romper um loop usamos a instrução `break`. Por exemplo:
```js
i=0;
while(true) {
i++;
console.log(`valor de i=${i}`)
if (i==10) {
break
}
}
console.log("fim do laço")
```
Quando o `break` é usado dentro de um laço, ele rompe o laço e o programa segue após o final do bloco do laço.
> `Flags`
>
> Note o uso da variável `i` nesse programa. Sua finalidade é servir de *indicação* para o programa de quando o loop deve ser interrompido. O programa constantemente consulta o valor dessa variável e, quando ela muda para um valor específico, algo acontece - no caso, este programa pára.
>
> Esse tipo de variável é chamada de `flag` (bandeira). A ideia é a de uma bandeira que, quando levantada, significa que algo importante mudou.
### Interrompendo loops aninhados
Se os loops estiverem aninhados e o break estiver em um laço interno, ele rompe o laço interno, que é o laço onde ele está. Para romper o laço externo é preciso outro break escrito no laço externo. Assim:
```js
i=0;
j=0;
while(true) {
j++;
console.log(`Valor de j=${j}`);
if (j==3) {
break;
}
while(true) {
i++;
console.log(`valor de i=${i}`);
if (i==2) {
break;
}
}
console.log('fim do laço interno');
// reiniciar i para entrar novamente
// no laço interno
i=0;
}
console.log('fim do laço externo');
```
2024-04-15 20:20:38 +02:00
## ![Robô](img/robof-64px.png)Variável contadora
2024-04-15 19:03:50 +02:00
Criamos uma variável contadora quando precisamos contar o número de ocorrências de um evento Normalmente ela vai começar com valor `0`.
Para incrementar a variável, precisamos criar uma expressão lógica que retorne `true` quando ocorrer a situação que estamos contando.
Quando a expressão for `true`, incrementamos a variável, representando mais uma ocorrência da situação em questão.
Por exemplo, se a situação que estamos contando é `quantas vezes o usuário digitou o número 10?`
```js
nVezes = 0
repetir
escrever "digite um número"
ler numero
se numero igual a 10
nVezes = nVezes + 1
```
Nesse exemplo a variável `nVezes` está contando o número de vezes que a condição `numero igual a 10` retornou `true`, pois o código que incrementa a variável `nVezes` só é executado sob essa condição
2024-04-15 20:20:38 +02:00
## ![Maguinho](img/mago-64px.png) Percorrer um array
2024-04-15 19:03:50 +02:00
Para percorrer um array usamos um loop controlado por uma variável contadora. A estratégia é acessar o array usando o valor dessa variável como índice.
Se vamos acessar o array desde o início, a variável começa com valor 0.
Depois, entramos em um loop que vai parar quando o valor da variável for igual ao comprimento do array (representando que estamos no último elemento do array e devemos parar de percorrê-lo).
Vamos incrementamos a variável de 1 em 1 (vamos contando de 1 em 1) a cada iteração do loop.
Dentro do loop acessamos o array usando a variável como índice, assim:
```js
variavel = 0
array = [a,b,c,d,e]
repetir até que variável = comprimento do array
elemento = array[variavel]
variavel = variavel + 1
escrever "Elemento atual é: " + elemento
```
Percorrer um array com um loop `for` é muitíssimo comum. Tanto que no VSCode esse trecho de código já está pronto. Experimente digitar for e veja a caixa de ajuda que se abre. A segunda opção monta a seguinte armadura:
```js
for (let index = 0; index < array.length; index++) {
const element = array[index];
}
```
Nesse exemplo, `array` é o array. Pode ser qualquer array.
O *pseudocódigo* anterior pode ser escrito em javascript assim:
```js
array = [a,b,c,d,e]
for (let variavel = 0; index < array.length; index++) {
const elemento = array[variavel];
console.log(`Elemento atual é: ${elemento}`)
}
```
Note que a inicialização da variável e também o incremento ocorrem na declaração do for.
2024-04-15 20:20:38 +02:00
## ![Robô](img/robof-64px.png) Somatório - variável acumuladora
2024-04-15 19:03:50 +02:00
Podemos usar um loop para somar uma série de valores. Para isso, a estratégia é usar uma `variável acumuladora` que nada mais é que uma variável usada exclusivamente para acumular os valores das somas parciais dos valores durante cada execução do loop.
```js
const valores[34,23,56,23,6,2,78,23]
let soma = 0;
for(i=0; i<valores.length; i++) {
soma = soma + valores[i];
console.log(`soma parcial = ${soma}`)
}
console.log(`Total = ${soma}`)
```
Durante a execução do loop o valor de `soma` é o valor parcial da soma. Ao final do loop o valor de `soma` contém a soma total.
[Índice](README.md)