Sistema de tipos
Os tipos internos, as anotações e as regras de compatibilidade.
Tipos internos#
| Nome | Representação | Literal |
|---|---|---|
Integer | inteiro de precisão arbitrária | 42 |
Float | ponto flutuante 64 bits | 3.14 |
String | texto imutável | "a" |
Boolean | yes / no | yes |
Void | ausência de valor | void |
Cluster | lista mutável ordenada | [1, 2] |
Vault | dicionário chave→valor | {"k": 1} |
Action | ação (função) | action f(): … |
Stream | sequência preguiçosa | stream action g(): … |
Blueprint | classe | blueprint P: … |
Record | tipo de dado imutável | record R: … |
Enum | conjunto fechado | enum E: … |
| nome do tipo | instância | spawn 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 é
Numbere o valor éIntegerouFloat; - o declarado é
Floate o valor éInteger— alargamento; - o declarado é o nome de um blueprint na cadeia de herança do valor.
Onde a checagem acontece#
| Local | Quando |
|---|---|
| variável anotada | na atribuição |
| parâmetro anotado | na chamada, antes de executar o corpo |
| retorno anotado | no yield |
| campo de record | na construção |
| tudo acima | també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 devolveFloat;~/devolveIntegerpara 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#
Generics — Cluster<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.