SPECTRALANG_

// DOCS NAVIGATION

Controle de Fluxo_

SOURCE: content/docs/reference/02-fundamentos.md02 Fundamentos / 6. Controle de Fluxo / Control Flow

if / else if / else

PT-BR:
A instrução if avalia uma condição booleana e executa o bloco correspondente. Use else if para condições adicionais e else para o caso padrão.

EN-US:
The if statement evaluates a boolean condition and executes the corresponding block. Use else if for additional conditions and else for the default case.

module controle

from std.io import println

public func main() {
    let nota = 75

    // if simples / simple if
    if nota >= 60 {
        println("Aprovado!")
    }

    // if / else
    if nota >= 60 {
        println("Aprovado!")
    } else {
        println("Reprovado.")
    }

    // if / else if / else
    if nota >= 90 {
        println("A")
    } else if nota >= 80 {
        println("B")
    } else if nota >= 70 {
        println("C")
    } else if nota >= 60 {
        println("D")
    } else {
        println("F")
    }
}

PT-BR:
if também é uma expressão — pode retornar um valor:

EN-US:
if is also an expression — it can return a value:

let classificacao = if nota >= 60 { "Aprovado" } else { "Reprovado" }

if not

Status: stable. Enabled by default.

PT-BR:
if not é a forma canônica da condição negativa — executa quando a condição é falsa.

EN-US:
if not is the canonical negative conditional — it executes when the condition is false.

let autenticado = false

if not autenticado {
    println("Acesso negado!")
}

// Forma canônica / Canonical form:
if not autenticado {
    println("Acesso negado!")
}

while

PT-BR:
Executa enquanto a condição for verdadeira. A condição é verificada antes de cada iteração.

EN-US:
Executes while the condition is true. The condition is checked before each iteration.

let i = 0
while i < 5 {
    println(f"i = {i}")
    i = i + 1
}
// Saída / Output: i = 0, i = 1, i = 2, i = 3, i = 4

// Com múltiplas condições / With multiple conditions
let x = 0
let y = 10
while x < 5 && y > 0 {
    x = x + 1
    y = y - 2
}

do...while

Status: stable. Enabled by default.

PT-BR:
Executa o bloco pelo menos uma vez e depois verifica a condição.

EN-US:
Executes the block at least once and then checks the condition.

let i = 0
do {
    println(f"Executado: {i}")
    i = i + 1
} while i < 3
// Imprime mesmo se i já fosse ≥ 3 / Prints even if i were already ≥ 3

for...in

PT-BR:
Itera sobre intervalos (ranges). Suporta intervalos exclusivos (..) e inclusivos (..=).

EN-US:
Iterates over ranges. Supports exclusive (..) and inclusive (..=) ranges.

// Intervalo exclusivo / Exclusive range: 0, 1, 2, 3, 4
for i in 0..5 {
    println(f"i = {i}")
}

// Intervalo inclusivo / Inclusive range: 1, 2, 3, 4, 5
for i in 1..=5 {
    println(f"i = {i}")
}

// Percorrer array / Iterate over array
let arr = [10, 20, 30, 40, 50]
for i in 0..5 {
    println(f"arr[{i}] = {arr[i]}")
}

loop

Status: stable. Enabled by default.

PT-BR:
Loop infinito. Use break para sair.

EN-US:
Infinite loop. Use break to exit.

let contador = 0
loop {
    contador = contador + 1
    if contador >= 5 {
        break
    }
}
// contador == 5

switch...case

Status: stable. Enabled by default.

PT-BR:
switch compara um valor contra múltiplos padrões explícitos. Requer um caso else padrão ou cobertura exaustiva.

EN-US:
switch compares a value against multiple explicit patterns. Requires a default else case or exhaustive coverage.

let dia = 3

switch dia {
    case 1: {
        println("Segunda / Monday")
    }
    case 2: {
        println("Terça / Tuesday")
    }
    case 3: {
        println("Quarta / Wednesday")
    }
    else: {
        println("Outro dia / Other day")
    }
}

break e continue

PT-BR:

  • break sai imediatamente do loop mais interno.
  • continue pula para a próxima iteração do loop mais interno.

EN-US:

  • break immediately exits the innermost loop.
  • continue skips to the next iteration of the innermost loop.
// break — sai ao encontrar 3 / exits when finding 3
for i in 0..10 {
    if i == 3 {
        break
    }
    println(f"{i}")
  // Imprime 0, 1, 2 / Prints 0, 1, 2
}

// continue — pula números pares / skips even numbers
for i in 0..8 {
    if i % 2 == 0 {
        continue
    }
    println(f"{i}")
  // Imprime 1, 3, 5, 7 / Prints 1, 3, 5, 7
}

Loops Aninhados / Nested Loops

for i in 0..3 {
    for j in 0..3 {
        println(f"{i},{j}")
    }
}

// break sai apenas do loop interno / break exits only the inner loop
for i in 0..5 {
    for j in 0..5 {
        if j == 2 {
            break
  // Sai do for j / Exits the for j
        }
        println(f"{i},{j}")
    }
}