Pular para o conteúdo

Sistema de tipos

Os tipos internos, as anotações e as regras de compatibilidade.

Tipos internos#

NomeRepresentaçãoLiteral
Integerinteiro de precisão arbitrária42
Floatponto flutuante 64 bits3.14
Stringtexto imutável"a"
Booleanyes / noyes
Voidausência de valorvoid
Clusterlista mutável ordenada[1, 2]
Vaultdicionário chave→valor{"k": 1}
Actionação (função)action f(): …
Streamsequência preguiçosastream action g(): …
Blueprintclasseblueprint P: …
Recordtipo de dado imutávelrecord R: …
Enumconjunto fechadoenum E: …
nome do tipoinstânciaspawn P(), R(1), E.A

typeof(x) devolve exatamente esses nomes — os mesmos que valem numa anotação.

Compatibilidade#

A checagem aceita um valor quando:

  • o tipo é exatamente o declarado;
  • o declarado é Any (a checagem é desligada);
  • o declarado é Number e o valor é Integer ou Float;
  • o declarado é Float e o valor é Integeralargamento;
  • o declarado é o nome de um blueprint na cadeia de herança do valor.

Onde a checagem acontece#

LocalQuando
variável anotadana atribuição
parâmetro anotadona chamada, antes de executar o corpo
retorno anotadono yield
campo de recordna construção
tudo acimatambém no dataforge check, sem executar

Semântica de valores#

  • Inteiros têm precisão arbitrária — não estouram.
  • Textos são imutáveis; os métodos devolvem cópias.
  • Clusters e vaults são mutáveis e passados por referência.
  • Records são imutáveis, com igualdade estrutural.
  • / sempre devolve Float; ~/ devolve Integer para operandos inteiros.
  • Divisão por zero dispara RuntimeError_.
  • + com um operando texto converte o outro para texto.
  • Índices negativos contam a partir do fim.

Verdadeiro e falso#

São falsos: void, no, 0, 0.0, "", [] e {}. Todo o resto é verdadeiro.

O que ainda não existe#

GenericsCluster<T>, Vault<K,V> e ações genéricas estão no roadmap. Hoje, o conteúdo de uma coleção se valida com código.