Pular para o conteúdo

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.

02-inline-call.zolo
Playground
// 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.

Buscar no Zolo

9 resultados

enespt-br