arrow_back Voltar ao curso

repete — Laços e Iteração

Fundamentos do XanaScript • Aula 10 de 20

Laços executam um bloco repetidamente. O XanaScript tem dois: repete-na-moral (for) e repete-enquanto (while).

repete-na-moral (for) — "quando você sabe quantas vezes"

js
repete-na-moral (cria i = 0; i < 5; i = i + 1) {
  grita-ae(i)
}

Saída: 0 1 2 3 4

Três partes: inicialização (cria i = 0), condição (i < 5) e passo (i = i + 1). O loop roda enquanto a condição for verdadeira.

Por que três partes?

Cada parte responde uma pergunta: onde começa? até quando? como anda? Separar isso torna o laço previsível — o contador não fica escondido dentro do corpo.

A forma mais comum: i++

js
repete-na-moral (cria i = 10; i > 0; i--) {
  grita-ae(i)
}

Percorrendo arrays

Este é o padrão nº 1 de laços na prática — passar por cada elemento:

js
cria frutas = ["maçã", "banana", "uva"]
repete-na-moral (cria i = 0; i < tamanho(frutas); i++) {
  grita-ae(frutas[i])
}

repete-enquanto (while) — "enquanto a condição for verdadeira"

Use quando você não sabe quantas vezes vai rodar — só sabe a condição de parada:

js
cria i = 0
repete-enquanto (i < 5) {
  grita-ae(i)
  i = i + 1
}

A diferença essencial

Laço Quando usar
repete-na-moral quantidade conhecida / percorrer coleção
repete-enquanto parada depende de condição que muda durante o loop

mete-o-pe (break) e segue-o-baile (continue)

mete-o-pe sai do laço; segue-o-baile pula pra próxima iteração:

js
repete-na-moral (cria i = 0; i < 10; i = i + 1) {
  se-pah (i == 3) {
    segue-o-baile()   // pula o 3
  }
  se-pah (i == 7) {
    mete-o-pe()       // para no 7
  }
  grita-ae(i)
}

Saída: 0 1 2 4 5 6

Loop infinito — e como escapar

repete-enquanto (verdadeiro) nunca para sozinho. Rode-o só com uma saída interna:

js
cria n = 0
repete-enquanto (verdadeiro) {
  n = n + 1
  se-pah (n == 100) {
    mete-o-pe()
  }
}
grita-ae(n)  // 100

Exemplo real: adivinhar número

js
cria alvo = escolhe(1, 10)
cria chute = 0

repete-enquanto (chute != alvo) {
  chute = chute + 1
}

grita-ae("Acertou em " + chute + " tentativas")
Comentários