Pular para o conteúdo

Métodos estáticos

O que pertence à família, não à instância.

dataforge
blueprint Temperatura:
    celsius: Float := 0.0

    static action de_fahrenheit(f):
        t := spawn Temperatura()
        t.celsius := (f - 32) * 5 / 9
        yield t

    static action congelamento():
        yield 0.0

    action em_fahrenheit():
        yield self.celsius * 9 / 5 + 32

Construtor alternativo#

É o uso mais comum: uma segunda forma de criar o objeto, com nome que diz o que ela faz.

dataforge
gelo := Temperatura.de_fahrenheit(32)
config := Config.do_arquivo("app.json")
data := Data.de_iso("2026-09-07")

Temperatura.de_fahrenheit(32) é mais claro que um setup com um parâmetro escala que muda o significado do primeiro argumento.

Valor estático#

dataforge
blueprint Contador:
    static total := 0            // compartilhado por todas as instâncias

    action setup():
        Contador.total += 1

Erro útil#

Chamar um método de instância no blueprint mostra o spawn que falta, em vez de estourar Undefined name: self lá dentro:

text
erro[DF0301]: 'Temperatura.em_fahrenheit()' is an instance method and needs an object.
    Spawn one first:
        obj := spawn Temperatura(…)
        obj.em_fahrenheit(…)
    Or declare it as 'static action em_fahrenheit(…)' if it does not use 'self'.