Arrays
Os arrays no Kriol são colecções de tamanho fixo de elementos do mesmo tipo.
Declaração com inicialização
Seção intitulada “Declaração com inicialização”<tipo>[<tamanho>] <nome> = [<valor1>, <valor2>, ...];nter[3] nums = [10, 20, 30];bool[2] flags = [sin, nau];O literal [ ... ] sem tipo explícito é interpretado pelo contexto da variável
ou campo que o recebe. Quando o contexto não deixa claro o tipo do array, usa
um literal tipado:
nter[3] valores = <nter>[1, 2, 3];Inicialização por repetição
Seção intitulada “Inicialização por repetição”Para preencher um array com o mesmo valor em todas as posições, usa a sintaxe [valor] * N:
nter[5] zeros = [0] * 5;num[10] uns = [1.0] * 10;Declaração diferida
Seção intitulada “Declaração diferida”Usa dipoz para declarar um array sem o inicializar imediatamente:
dipoz nter[3] nums;nums[0] = 7;nums[1] = 5;nums[2] = nums[0] + nums[1];Acesso a elementos
Seção intitulada “Acesso a elementos”Os índices começam em 0:
nter[5] seq = [1, 2, 3, 4, 5];mostran(seq[0]); // 1mostran(seq[4]); // 5seq[2] = 99;mostran(seq[2]); // 99Uso com ciclos
Seção intitulada “Uso com ciclos”nter[10] seq = [0] * 10;
pa nter i = 0; i < 10; i += 1 { seq[i] = i * i;}
mostran(f"Quadrados: {seq}");Impressão de arrays
Seção intitulada “Impressão de arrays”Podes passar um array diretamente a mostra / mostran ou usá-lo numa f-string para imprimir todos os elementos:
nter[3] a = [1, 2, 3];mostran(a); // imprime os elementosmostran(f"Array: {a}"); // interpolação de arrayArrays também podem aparecer como campos de um molde:
molda Pessoa { textu nomi; nter[2] flags;}
Pessoa pessoa = Pessoa::{nomi: "jose", flags: [0, 1]};mostran(f"Flags: {pessoa.flags}");Arrays de valores de moldes podem ser guardados e indexados. Isto permite encadear acesso a índice e campo:
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;Restrições actuais
Seção intitulada “Restrições actuais”- O tamanho do array deve ser um literal inteiro. Não pode ser uma variável.
- Literais sem tipo explícito precisam de um contexto de array. Se o compilador
não conseguir inferir o alvo, usa
<tipo>[...]. - Arrays de valores de moldes podem ser usados, mas não podem ser impressos como
um todo com
mostra,mostranou f-strings; imprime campos individuais ou arrays de tipos primitivos. - Arrays de arrays (multidimensionais) ainda não têm sintaxe de declaração direta na versão atual.