SPECTRALANG_

// DOCS NAVIGATION

while let_

SOURCE: content/docs/reference/04-avancado.md04 Avançado / 3. while let

PT-BR:
while let combina um padrão com um loop: continua executando enquanto o padrão corresponder. Quando o padrão não corresponder mais, o loop termina.

EN-US:
while let combines a pattern with a loop: it keeps executing as long as the pattern matches. When the pattern no longer matches, the loop terminates.

module while_let_demo

from std.io import println

func encontrar_positivo(n: int) returns Option<int> {
    if n > 0 {
        return Option::Some(n)
    }
    return Option::None
}

public func main() {
    let contador = 5

    while let Option::Some(n) = encontrar_positivo(contador) {
        println(f"Valor positivo: {n}")
        contador = contador - 1
    }
    // Imprime 5, 4, 3, 2, 1 e para quando contador == 0

    // Processando itens de uma fila / Processing queue items
    let itens = [10, 20, 30]
    let idx = 0

    while let Option::Some(item) = obter_item(itens, idx, 3) {
        println(f"Processando: {item}")
        idx = idx + 1
    }
}

func obter_item(arr: [int], idx: int, tamanho: int) returns Option<int> {
    if idx < tamanho {
        return Option::Some(arr[idx])
    }
    return Option::None
}