SPECTRALANG_

// DOCS NAVIGATION

F-Strings Avançadas_

SOURCE: content/docs/reference/04-avancado.md04 Avançado / 8. F-Strings Avançadas / Advanced F-Strings

PT-BR:
F-strings (f"...") suportam expressões arbitrárias dentro de {...}. Praticamente qualquer expressão válida em SpectraLang pode ser interpolada.

EN-US:
F-strings (f"...") support arbitrary expressions inside {...}. Virtually any valid SpectraLang expression can be interpolated.

module fstrings_avancado

from std.io import println

public func main() {
    let nome = "Alice"
    let pontos = 850
    let nivel = 5

    // Variáveis simples / Simple variables
    println(f"Jogador: {nome}")

    // Expressões aritméticas / Arithmetic expressions
    println(f"Próximo nível: {nivel + 1}")
    println(f"Pontos necessários: {(nivel + 1) * 200 - pontos}")

    // Chamadas de função / Function calls
    println(f"Dobro dos pontos: {dobrar(pontos)}")

    // Acesso a campos / Field access
    let p = Ponto { x: 10, y: 20 }
    println(f"Posição: ({p.x}, {p.y})")

    // Comparações / Comparisons
    println(f"Nível máximo: {nivel == 10}")

    // Literais / Literals
    println(f"Total: {pontos + 150}")

    // Expressões complexas / Complex expressions
    let media = (80 + 90 + 75) / 3
    println(f"Média: {media}")

    // Interpolação dentro de interpolação (cuidado com clareza)
    // Interpolation within interpolation (be careful with clarity)
    let lista = [1, 2, 3]
    println(f"Primeiro: {lista[0]}, Último: {lista[2]}")
}

func dobrar(x: int) returns int { x * 2 }
record Ponto { x: int, y: int }

Casos Especiais / Special Cases

// Chaves literais — não suportadas diretamente / Literal braces — not directly supported
// Use uma variável intermediária / Use an intermediate variable
let chave_esq = "{"
let chave_dir = "}"
println(f"Objeto JS: {chave_esq}valor{chave_dir}")

// Strings vazias / Empty strings
let vazio = ""
println(f"Campo: '{vazio}'")
    // Campo: ''

// Valores de retorno void (unit) não devem ser interpolados
// Void (unit) return values should not be interpolated