Quando estou estudando uma linguagem de desenvolvimento nova, acho que depois da sintaxe da linguagem em si, a segunda coisa mais imporante é aprender o que a linguagem me oferece em termos de coleções. Afinal no dia-a-dia nos usamos estes objetos intensamente e escolher a coleção correta para o problema pode melhorar a performance da aplicação assim como a legibilidade do código.
O livro Inside Microsoft Dynamics AX 4.0 tem um item dedicado às coleções oferecidas pelo X++. Vou fazer aqui um breve resumo, pois considero o assunto fundamental para os desenvolvedores que estão iniciando na linguagem. Vou aproveitar e fazer um paralelo com as coleções do .Net Framework, para quem tem experiência com esta plataforma.
A coleção Array, como qualquer array, guarda instâncias de qualquer tipo de objeto. O índice do Array no X++ começa do 1, e não do zero, como no C#. Todo Array em X++ é dinâmico, ou seja seu tamanho cresce conforme objetos são incluídos. Na Listagem 1 um array de strings é criado e carregado com os nomes dos estados da região sudeste. O array é a coleção mais básica, porém também uma das usadas em diversas linguagens.
Array array = new Array(types::string);
int i;
;
array.value(1, "Rio de Janeiro");
array.value(3, "Minas Gerais");
array.value(2, "São Paulo");
array.value(4, "Espírito Santo");
for (i = 1; i <= array.lastIndex(); i++)
{
print(array.value(i));
}
//Resultado:
//Rio de Janeiro
//São Paulo
//Minas Gerais
//Espírito Santo
print array.lastIndex(); // 4
pause;
Em X++ o array tem tamanho dinâmico, você não precisa definir nem controlar o tamanho da coleção. O índice do Array inicia em 1 e não em 0, como outras linguagens.
Esta coleção funciona bem tanto para casos de acesso sequenciais quanto para casos no qual o índice desejado é conhecido.
Existem outras coleções que funcionam melhor para outros casos. Veremos estas mais tarde.