proc main(): void {
for i := 0; i < 3; i++ {
echo "quadro {i}"
}
for i := 10; i > 7; i-- { // o contador é do próprio laço
echo "contagem {i}"
}
// Qualquer cláusula pode ser omitida. Só com condição, é um laço while.
mut left := 3
for ; left > 0; {
left -= 1
}
echo left
}proc main(): void {
for each name: Str in ["north", "", "south", "orchard"] {
if name == "" {
continue // pula para o próximo
}
if name == "south" {
break // sai do laço por completo
}
echo name
}
}Existem dois laços.
O de contagem é for i := 0; i < 10; i++. Seu contador pertence ao laço — o próximo laço pode dar o mesmo nome ao seu contador — e é mutável sem dizer mut, embora ainda siga a regra do camelCase. Qualquer uma das três cláusulas pode ser omitida, que é como se escreve um laço while: for ; left > 0; { … }.
O de percorrer é for each name in values. Ele vincula cada elemento de um vetor a um name imutável, em ordem, e como nunca indexa, não precisa de prova de limites. for each name: T in values declara o tipo do elemento em vez de inferi-lo, e um tipo que os elementos não satisfazem é um erro de compilação. Uma Str e um mapa não são vetores, então nenhum dos dois pode ser percorrido assim: split(text, "") são os caracteres de uma string, e as chaves de um mapa aparecem no slide dele.
break sai do laço mais interno e continue pula para a próxima volta dele; qualquer um dos dois fora de um laço é um erro de compilação.