Aller au contenu principal
Version: v19

Collection

Les collections sont des listes ordonnées de valeurs de types similaires ou différents (texte, nombre, date, objet, booléen, collection ou null).

Pour manipuler les variables de type Collection, vous devez utiliser la notation objet (voir Les bases de la syntaxe).

Pour accéder à un élément d'une collection, vous devez passer le numéro de l'élément entre crochets :

collectionRef[expression]

Vous pouvez passer toute expression 4D valide qui retourne un nombre entier positif dans expression. Exemples :

 myCollection[5]  //accès au 6e élément de la collection
myCollection[$var]

Attention : N'oubliez pas que la numérotation des éléments de collection débute à 0.

Vous pouvez assigner une valeur à un élément de collection ou lire une valeur d'élément de collection :

 myCol[10]:="Mon nouvel élément"
$myVar:=myCol[0]

Si vous assignez un numéro d'élément plus grand que celui du dernier élément existant dans la collection, la collection est automatiquement redimensionnée et les nouveaux éléments intermédiaires prennent la valeur null :

 var myCol : Collection
myCol:=New collection("A";"B")
myCol[5]:="Z"
//myCol[2]=null
//myCol[3]=null
//myCol[4]=null

Initialisation

Les collections doivent être initialisées à l'aide, par exemple, de la commande Creer collection, sinon une erreur de syntaxe sera générée à la suite d'une lecture ou d'une modification d'un ou plusieurs élements de la collection.

Voici un exemple :

 var $colVar : Collection //création d'une variable 4D de type collection
$colVar:=New collection ///initialisation de la collection et assignation à la variable 4D

Collection standard ou collection partagée

Vous pouvez créer deux types de collections :

  • collections standard (non partagées), à l'aide de la commande New collection. Ces collections peuvent être modifiées sans contrôle d'accès spécifique mais ne peuvent pas être partagées entre les process.
  • des collections partagées, à l'aide de la commande New shared collection. Le contenu de ces collections peut être partagé entre les process, y compris des process (thread) préemptifs. L'accès à ces collections doit être contrôlé via des structures Use...End use.

Pour plus d'informations, veuillez vous reporter à la page Objets partagés et collections partagées.

Fonctions de collection

Les références de collections 4D bénéficient de fonctions de classe spécifiques (souvent appelées fonctions membres). Les fonctions de collection sont répertoriées dans la section Class API Reference.

Par exemple :

$newCol:=$col.copy() //copie de $col vers $newCol
$col.push(10;100) //ajout de 10 et 100 à la collection

Certaines fonctions retournent la collection d'origine après modification, de manière à ce que vous puissiez enchaîner les appels dans une même séquence :

 $col:=New collection(5;20)
$col2:=$col.push(10;100).sort() //$col2=[5,10,20,100]

paramètre propertyPath

Plusieurs fonctions acceptent un paramètre nommé propertyPath. Ce paramètre peut contenir :

  • soit un nom de propriété d'objet, par exemple "nomComplet"
  • soit un chemin de propriété d'objet, c'est-à-dire une séquence hiérarchique de sous-propriétés reliées par des points, par exemple "employé.enfant.prénom".

Attention : Lorsque des fonctions ou un paramètre cheminPropriété sont attendus, l'utilisation de noms de propriétés contenant ".", "[ ]", ou des espaces n'est pas prise en charge car cela empêcherait 4D d'analyser correctement le chemin :

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