Pular para o conteúdo

Variáveis

Declaração com :=, constantes com steady, escopo e a variável local com shadow.

Declarar#

O operador de atribuição é :=. Ele cria a variável se ela não existir e atualiza se existir.

dataforge
nome := "DataForge"
idade := 30
altura := 1.75
ativo := yes
vazio := void

out nome, idade, altura, ativo, vazio
saída
DataForge 30 1.75 yes void

Constantes#

steady declara um valor imutável. Reatribuir é erro — detectado inclusive pelo analisador estático, antes de executar.

dataforge
steady PI := 3.14159
steady LIMITE := 100

out PI, LIMITE

monitor:
    PI := 0
handle e:
    out e.message
saída
3.14159 100
Cannot reassign steady (constant) 'PI'

Escopo#

Uma ação enxerga as variáveis do escopo onde foi definida. Atribuir a um nome que já existe fora atualiza o de fora:

dataforge
contador := 0

action incrementar():
    contador := contador + 1     # atualiza o de fora
    yield contador

incrementar()
incrementar()
out contador
saída
2

shadow — uma cópia local#

Quando você quer um nome local que não afeta o de fora, use shadow:

dataforge
x := 10

action le():
    yield x                  # enxerga o de fora: 10

action sombreia():
    shadow x := 99           # cria uma cópia local
    yield x                  # 99

out le(), sombreia(), x
saída
10 99 10

A terceira saída é o ponto: x continua valendo 10. shadow diz explicitamente "este nome é meu, aqui dentro".

Nomes válidos#

  • Começam com letra ou _, seguidos de letras, dígitos ou _
  • São sensíveis à caixa: total e Total são nomes diferentes
  • Não podem ser uma das 81 palavras reservadas
dataforge
// nao := 1     # erro: 'no' faz parte de 'nao'? Não — 'nao' é válido.
no := 1         # ERRO: 'no' é palavra reservada (o literal falso)
resposta := no  # certo: usa 'no' como valor

Apagar#

delete remove um nome do escopo:

dataforge
temporario := "vai sumir"
out temporario
delete temporario

monitor:
    out temporario
handle e:
    out e.message
saída
vai sumir
Undefined name: 'temporario'