Pular para o conteúdo

augment

Acrescentar membros a um blueprint que já existe — sem substituir nada, sem atravessar final nem sealed.

augment é a extensão de um tipo sem herança: métodos, propriedades, operadores e estáticos novos num blueprint que já existe — e nos objetos que já foram criados. É o que outras linguagens chamam de método de extensão ou classe parcial.

dataforge
blueprint Dinheiro(centavos):
    action reais():
        yield self.centavos / 100

carteira := spawn Dinheiro(1250)

augment Dinheiro:
    get texto():
        yield $"R$ {self.reais():.2f}"
    operator + (outro):
        yield spawn Dinheiro(self.centavos + outro.centavos)

assert carteira.texto is "R$ 12.50"               // o objeto de antes ganhou
assert (carteira + spawn Dinheiro(50)).centavos is 1300

O que augment recusa#

TentativaPor quê
substituir um membro que existesubstituir é o papel da herança; um augment que troca comportamento de longe é impossível de depurar
augment de final blueprintfinal promete que o tipo está completo
augment de sealed de outro arquivosealed promete que a família é conhecida
acrescentar campo de instânciaos objetos que já existem não o teriam
ver private de outro arquivoaugment não pode ser a porta dos fundos para o que o autor fechou