Pular para o conteúdo

Arrays

Os arrays no Kriol são colecções de tamanho fixo de elementos do mesmo tipo.

<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];

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;

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];

Os índices começam em 0:

nter[5] seq = [1, 2, 3, 4, 5];
mostran(seq[0]); // 1
mostran(seq[4]); // 5
seq[2] = 99;
mostran(seq[2]); // 99
nter[10] seq = [0] * 10;
pa nter i = 0; i < 10; i += 1 {
seq[i] = i * i;
}
mostran(f"Quadrados: {seq}");

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 elementos
mostran(f"Array: {a}"); // interpolação de array

Arrays 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;
  • 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, mostran ou 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.