Funções comptime
Nesta página
Quando a mesma lógica de pré-cálculo precisa ser chamada em múltiplos lugares,
um bloco inline se torna repetitivo. A solução é declarar uma função
comptime: anote a função com @comptime e ela passa a poder ser invocada com
comptime f(args) em qualquer expressão. Cada chamada é resolvida pelo
compilador e substituída pelo literal correspondente.
Diferente de um bloco avulso, a função tem nome, recebe parâmetros tipados e
pode ser composta — você pode somar comptime double(10) com comptime triple(4) na mesma expressão e o compilador resolve as duas antes de gerar
código.
Duas funções @comptime combinadas na mesma expressão — o resultado é um único literal.
// Feature: comptime <expr> — call a `@comptime fn` and bake the result
// Syntax: declare with `@comptime fn`; invoke with `comptime f(x)`.
// The function runs in the compiler and the call site is replaced
// with the literal result.
// When to use: short, pure helpers — math, string formatting, table
// lookups — that you want resolved before runtime.
@comptime
fn double(n: int) -> int {
return n * 2
}
let x = comptime double(21)
print(x)
// expected: 42
// Multiple comptime calls in one expression.
@comptime
fn triple(n: int) -> int {
return n * 3
}
let y = comptime double(10) + comptime triple(4)
print(y)
// expected: 32
Uma observação prática: o lint de funções não usadas pode sinalizar uma @comptime fn
como "nunca chamada", pois invocações comptime não aparecem como chamadas em
tempo de execução. É seguro ignorar esse aviso.
Veja também