Collection
Coleções são listas ordenadas de valores de tipos diferentes ou não (texto, número, objeto, booleano, coleção ou null).
Para gerenciar as variáveis de tipo Coleção se deve utilizar a notação de objetos (ver Syntax basics).
Para acessar a um elemento de coleção, é necessário passar o número do elemento dentro de parênteses rectos:
collectionRef[expression]
Pode passar toda expressão 4D válida que devolva um inteiro positivo na expressão. Exemplos:
myCollection[5] //aceso ao 6º elemento da coleção
myCollection[$var]
Atenção: os elementos da coleção estão numerados desde 0.
Pode atribuir um valor a um elemento da coleção ou obter o valor de um elemento da coleção utilizando a notação de objetos:
myCol[10]:="My new element"
$myVar:=myCol[0]
Se atribuir um índice de elemento que ultrapasse o último elemento existente da coleção, a coleção se redimensiona automaticamente e a todos os novos elementos intermediários se lhes atribui um valor nulo:
C_COLLECTION(myCol)
myCol:=New collection("A";"B")
myCol[5]:="Z"
//myCol[2]=null
//myCol[3]=null
//myCol[4]=null
Inicialização
Coleções devem ter sido inicializadas, por exemplo, usando o comando New collection
, caso contrário, tentar ler ou modificar seus elementos gerará um erro de sintaxe.
Exemplo:
var $colVar : Collection //criação de uma variável 4D de tipo coleção
$colVar:=New collection //initialização da coleção e atribuição à variável 4D
Coleção regular ou partilhada
Pode criar dois tipos de coleções:
- regular (non-shared) collections, using the
New collection
command. Essas coleções podem ser editadas sem qualquer controle de acesso específico mas não podem ser compartilhadas entre processos. - coleções compartidas, utilizando o comando
New shared collection
. Essas coleções podem ser partilhadas entre processos, incluindo threads preemptivos. Access to these collections is controlled byUse... End use
structures.
Para saber mais, consulte a seção Objetos e coleções compartidos.
Funções de Collection
As referências a coleções 4D se beneficiam de métodos especiais (as vezes chamados funções membro). As funções de coleção estão listadas na seção Class API Reference.
Por exemplo:
$newCol:=$col.copy() //cópia de $col a $newCol
$col.push(10;100) //adiciona 10 e 100 para a coleção
Alguns métodos retornam a coleção original depois de moficiação, para que possa rodar as chamadas em sequência:
$col:=New collection(5;20)
$col2:=$col.push(10;100).sort() //$col2=[5,10,20,100]
parâmetro caminoPropriedade
Vários métodos aceitam uma propertyPath como parâmetro. Este parâmetro significa:
- um nome de objeto propriedade por exemplo "Sobrenome"
- ou uma rota de propriedades de objeto, ou seja, uma sequência hierárquica de subpropriedades vinculadas com caracteres de ponto, por exemplo "empregado.filhos.nome".
Warning: When using functions and propertyPath parameters, you cannot use ".", "[ ]", or spaces in property names since it will prevent 4D from correctly parsing the path:
$vmin:=$col.min("My.special.property") //indefinido
$vmin:=$col.min(["My.special.property"]) //erro