Pular para o conteúdo

Campos e visibilidade

Declarar o que o objeto tem, e decidir quem enxerga.

Campos declarados#

dataforge
blueprint Contador:
    valor: Integer := 0
    passo: Integer := 1

    action somar():
        self.valor += self.passo
        yield self.valor

Declarar o campo separa o que o objeto tem de como ele nasce. Antes do 4.1, para saber a forma de um objeto era preciso ler o setup inteiro.

  • Sem padrão, o campo nasce void — não é erro, é o valor que diz "ainda não tem"
  • Campos são herdados; o filho enxerga os do pai sem redeclarar
  • A anotação de tipo é verificada pelo analisador estático

Visibilidade#

dataforge
blueprint Conta:
    private saldo: Float := 0.0      // só dentro de Conta
    protected titular: String := ""  // Conta e seus herdeiros
    numero: String := ""             // público

Em DataForge, private impede de verdade — não é convenção. O acesso de fora é recusado, dizendo de onde partiu:

text
erro[DF0301]: 'Conta.saldo' is private and was accessed outside any blueprint.
              Only 'Conta' can read it.
Quem enxerga
(nada)qualquer código
protectedo blueprint e seus herdeiros
privatesó o próprio blueprint

O que fica público é a promessa que você mantém. O resto pode mudar sem avisar ninguém — e é essa liberdade que a visibilidade compra.

Modificadores combinam#

dataforge
blueprint Conta:
    private static contador: Integer := 0
    private action registrar_operacao(tipo):
        

A ordem não importa: private static action f() e static private action f() são a mesma coisa.

Palavras contextuais#

private, protected, get, set, operator, final e abstract não são reservadas. Só têm significado dentro do corpo de um blueprint:

dataforge
final := 10                  // uma variável chamada 'final'
action get(chave):           // uma ação chamada 'get'
    yield chave

blueprint Conta:
    private saldo: Float := 0.0    // aqui 'private' é modificador

Foi deliberado: get e final são nomes bons demais para tirar de quem escreve. Reservá-los globalmente quebrou três arquivos do próprio repositório na primeira tentativa.