Saltar para o conteúdo principal
Version: v20 BETA

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

Instanciação

As coleções devem ter sido inicializadas, por exemplo utilizando o comando New collection, do contrário ao tentar ler ou modificar seus elementos se gerará um erro de sintaxe.

A instanciação da colecção pode ser feita de uma das seguintes formas:

info

Vários comandos e funções 4D retornam colecções, por exemplo Get Monitored Activity ou collection.copy. Neste caso, não é necessário instanciar explicitamente a coleção, a linguagem 4D fá-lo por si.

comando New collection

O comando New collection cria uma nova colecção vazia ou pré-preenchida e devolve a sua referência.

Exemplos:

 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

operador []

O operador [] permite-lhe criar uma colecção literal. Um literal de coleção é uma lista de zero ou mais expressões, cada uma das quais representa um elemento de coleção, entre colchetes ([]). Quando cria uma coleção utilizando um literal de coleção, esta é instanciada com os valores especificados como seus elementos e o seu comprimento é definido para o número de argumentos especificados.

Já que qualquer elemento é considerado uma expressão, pode criar sub-coleções utilizando [] em elementos. Também é possível criar e referenciar literais de objectos ****.

Se um elemento for indefinido, aparecerá como Nulo na coleção.

Exemplos:

var $col1; $col2; $users : Collection
$col1:=[] //colecção vazia
$col2:=[1;2;3;4;5;6] //colecção de números
//colecção de objectos
$users:=[{name: "Alice"; \
height: 183; \
eyecolor: "hazel"; \
id: $col2[5]\
}; \
{name: "Bob"; \
height: 172; \
eyecolor: "blue"\
}]
nota

Se criar um literal de coleção que contenha um único elemento, certifique-se de que não utiliza um nome correspondente a um nome de tabela existente, caso contrário a sintaxe da tabela [tableName] terá prioridade.

Coleção regular ou partilhada

Pode criar dois tipos de coleções:

  • colecções regulares (não partilhadas), utilizando o comando Nova colecção . 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 by Use... 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 recolhimento 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".

Advertência: Ao usar funções e parâmetros de propriedadePath, não se pode usar ".", "[ ]", ou espaços nos nomes das propriedades, uma vez que isso impedirá que 4D analise correctamente o caminho:

 $vmin:=$col.min("My.special.property") //indefinido
$vmin:=$col.min(["My.special.property"]) //erro