Moldes (`molda`)
O que são moldes?
Seção intitulada “O que são moldes?”Um molde é um tipo composto que agrupa campos de diferentes tipos, semelhante a uma struct em C. A palavra-chave molda declara um novo molde: isto é, define a forma que valores desse tipo devem ter. O suporte atual inclui declaração de tipos, literais com campos nomeados, arrays como campos, acesso com . e atribuição a campos.
Declaração
Seção intitulada “Declaração”molda Pessoa { textu nomi; nter idadi;}Cada campo usa a mesma forma de declaração de tipo e nome usada em parâmetros e variáveis. O bloco declarado com molda não precisa de ; depois de }.
Nomes de tipos definidos pelo utilizador começam com letra maiúscula. Variáveis, funções e campos continuam a usar identificadores iniciados por letra minúscula ou _.
Campos também podem ser arrays de tamanho fixo:
molda Pessoa { textu nomi; nter[2] flags;}Criação de valores
Seção intitulada “Criação de valores”Valores de um molde são criados com um literal associado ao tipo:
Pessoa pessoa = Pessoa::{nomi: "jose", idadi: 60};Todos os campos são obrigatórios por agora. Campos repetidos, campos desconhecidos ou valores com tipos incompatíveis são erros em tempo de compilação.
Se um campo for array, o literal [ ... ] recebe o tipo esperado a partir do
campo:
Pessoa pessoa = Pessoa::{nomi: "jose", flags: [0, 1]};Acesso a campos
Seção intitulada “Acesso a campos”Usa . para ler ou alterar um campo:
mostran(pessoa.nomi);mostran(pessoa.idadi);
pessoa.idadi = 61;pessoa.idadi += 1;O acesso pode ser encadeado com outros campos e índices de array:
molda Enderesu { textu rua; nter numero;}
molda Pessoa { Enderesu[2] enderesus;}
Pessoa pessoa = Pessoa::{ enderesus: [ Enderesu::{rua: "antigu", numero: 10}, Enderesu::{rua: "nobu", numero: 44} ]};
pessoa.enderesus[0].rua = "medio";pessoa.enderesus[0].numero += 5;Valores de moldes são passados para funções por cópia. Alterar um parâmetro
dentro de uma função não altera o valor original fora dela. O uso de referências
explícitas com ref será tratado numa fase futura.
Exemplo completo
Seção intitulada “Exemplo completo”molda Pessoa { textu nomi; nter idadi;}
fn proxima_idadi(Pessoa pessoa) nter { divolvi pessoa.idadi + 1;}
fn inisiu() { Pessoa pessoa = Pessoa::{nomi: "jose", idadi: 60}; mostra(pessoa.nomi); mostra(" "); mostran(proxima_idadi(pessoa));}Limitações atuais
Seção intitulada “Limitações atuais”- Métodos e blocos
faziainda não estão implementados. - Valores de moldes ainda não têm uma representação direta em
mostraou f-strings; imprime campos individuais. - Arrays de valores de moldes podem ser guardados e indexados, mas não são imprimíveis como um todo.
- Herança não está prevista.