Collection
La classe Collection gère les variables de type Collection.
Une collection est initialisée avec :
New collection {( ...value : any )} : Collection crée une nouvelle collection vide ou préremplie |
New shared collection {( ...value : any )} : Collection crée une nouvelle collection partagée vide ou préremplie |
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
Sommaire
.at( index : Integer ) : any retourne l'élément à la position index, acceptant des entiers positifs et négatifs |
.average( {propertyPath : Text } ) : Real retourne la moyenne arithmétique des valeurs définies dans l'instance de collection |
.clear() : Collection supprime tous les éléments de l'instance de collection et retourne une collection vide |
.combine( col2 : Collection {; index : Integer } ) : Collection insère col2 éléments à la fin ou à la position spécifiée par index dans l'instance de collection et retourne la collection modifiée |
.concat( value : any { ;...valueN } ) : Collection retourne une nouvelle collection contenant les éléments de la collection d'origine avec tous les éléments du paramètre value ajoutés à la fin |
.copy() : Collection .copy( option : Integer ) : Collection .copy( option : Integer ; groupWithCol : Collection ) : Collection .copy( option : Integer ; groupWithObj : Object ) : Collection renvoie une copie profonde (deep copy) de l'instance de collection |
.count( { propertyPath : Text } ) : Real retourne le nombre d'éléments non nuls dans la collection |
.countValues( value : any {; propertyPath : Text } ) : Real retourne le nombre d'occurences de value dans la collection |
.distinct( {options : Integer} ) : Collection .distinct( propertyPath : Text {; options : Integer } ) : Collection renvoie une collection contenant uniquement les valeurs distinctes (différentes) de la collection originale |
.equal( collection2 : Collection {; option : Integer } ) : Boolean compare récursivement le contenu de la collection et de collection2 (comparaison profonde) |
.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean .every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean retourne true si tous les éléments de la collection ont été évalués à vrai par le test implémenté dans l'objet formula ou la méthode methodName |
.extract( propertyPath : Text { ; option : Integer } ) : Collection .extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection crée et renvoie une nouvelle collection contenant les valeurs propertyPath extraites de la collection originale d'objets |
.fill( value : any ) : Collection .fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection remplit la collection avec la valeur spécifiée, éventuellement de l'index startFrom à l'index end, et renvoie la collection résultante |
.filter( formula : 4D.Function { ; ...param : any } ) : Collection .filter( methodName : Text { ; ...param : any } ) : Collection retourne une nouvelle collection contenant tous les éléments de la collection d'origine pour lesquels le résultat de la formula ou de la méthode methodName est true |
.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any .find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any retourne la première valeur dans la collection pour laquelle le résultat de formula ou de methodName, appliqué à chaque élément, retourne true |
.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer .findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer retourne l'indice, dans la collection, du premier élément pour lequel formula ou methodName, appliqué à chaque élément, retourne true |
.first() : any retourne le premier élément de la collection |
.flat( { depth : Integer } ) : Collection crée une nouvelle collection avec tous les éléments des sous-collections concaténés de manière récursive jusqu'à la depth spécifiée |
.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection .flatMap( methodName : Text { ; ...param : any } ) : Collection crée une nouvelle collection basée sur le résultat de l'appel de la fonction 4D formula ou de la méthode methodName sur chaque élément de la collection d'origine et mise à plat sur une profondeur de 1 |
.includes( toSearch : expression { ; startFrom : Integer } ) : Boolean retourne True si l'expression toSearch est trouvée parmi les éléments de la collection, sinon False |
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer recherche l'expression toSearch parmi les éléments de la collection et retourne l'indice de la première occurrence trouvée, ou -1 si aucune occurrence n'a été trouvée |
.indices( queryString : Text { ; ...value : any } ) : Collection renvoie les indices, dans la collection d'origine, des éléments de la collection d'objets qui correspondent aux conditions de recherche queryString |
.insert( index : Integer ; element : any ) : Collection insère element à la position index spécifiée dans l'instance de collection et renvoie la collection modifiée |
.join( delimiter : Text { ; option : Integer } ) : Text convertit tous les éléments de la collection en chaînes et les concatène en utilisant la chaîne delimiter spécifiée comme séparateur |
.last() : any renvoie le dernier élément de la collection |
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer recherche l'expression toSearch parmi les éléments de la collection et renvoie l'indice de la dernière occurrence |
.length : Integer renvoie le nombre d'éléments de la collection |
.map( formula : 4D.Function { ; ...param : any } ) : Collection .map( methodName : Text { ; ...param : any } ) : Collection crée une nouvelle collection basée sur le résultat de l'appel de la fonction 4D formula ou de la méthode methodName sur chaque élément de la collection d'origine |
.max( { propertyPath : Text } ) : any renvoie l'élément ayant la valeur la plus élevée dans la collection |
.min( { propertyPath : Text } ) : any renvoie l'élément ayant la plus petite valeur dans la collection |
.multiSort() : Collection .multiSort( colsToSort : Collection ) : Collection .multiSort( formula : 4D.Function ; colsToSort : Collection ) : Collection vous permet d'effectuer un tri synchronisé à plusieurs niveaux sur un ensemble de collections |
.orderBy( ) : Collection .orderBy( pathStrings : Text ) : Collection .orderBy( pathObjects : Collection ) : Collection .orderBy( ascOrDesc : Integer ) : Collection renvoie une nouvelle collection contenant tous les éléments de la collection dans l'ordre spécifié |
.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection .orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection renvoie une nouvelle collection contenant tous les éléments de la collection dans l'ordre défini par la fonction 4D formula ou la méthode methodName |
.pop() : any supprime le dernier élément de la collection et le renvoie comme résultat de la fonction |
.push( element : any { ;...elementN } ) : Collection ajoute un ou plusieurs element(s) à la fin de l'instance de collection et renvoie la collection modifiée |
.query( queryString : Text ) : Collection .query( queryString : Text ; ...value : any ) : Collection .query( queryString : Text ; querySettings : Object ) : Collection renvoie tous les éléments d'une collection d'objets qui correspondent aux conditions de recherche |
.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any .reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any applique la callback formula ou le methodName à un accumulateur et à chaque élément de la collection (de gauche à droite) pour les réduire à une seule valeur |
.reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any .reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any applique la callback formula ou methodName à un accumulateur et chaque élément de la collection (de droite à gauche) pour la réduire à une valeur unique |
.remove( index : Integer { ; howMany : Integer } ) : Collection supprime un ou plusieurs élément(s) de la collection à partir de la position spécifiée dans index et renvoie la collection modifiée |
.resize( size : Integer { ; defaultValue : any } ) : Collection redéfinit la longueur de la collection à la nouvelle taille sp écifiée et renvoie la collection redimensionnée |
.reverse( ) : Collection renvoie une copie profonde de la collection avec tous ses éléments dans l'ordre inverse |
.shift() : any supprime le premier élément de la collection et le renvoie en tant que résultat de la fonction |
.slice( startFrom : Integer { ; end : Integer } ) : Collection retourne une partie d'une collection dans une nouvelle collection |
.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean .some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean retourne true si au moins un élément de la collection a réussi le test implémenté dans le code formula ou methodName fourni |
.sort() : Collection .sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection .sort( methodName : Text { ; ...extraParam : any } ) : Collection trie les éléments de la collection d'origine et retourne également la collection triée |
.sum( { propertyPath : Text } ) : Real retourne la somme de toutes les valeurs de l'instance de collection |
.unshift( value : any { ;...valueN : any } ) : Collection insère la/les value(s) donnée(s) au début de la collection |
New collection
New collection {( ...value : any )} : Collection
Paramètres | Type | Description | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer | -> | Valeur(s) de collection |
Résultat | Collection | <- | $1.stop (booléen, optionnel) : true pour stopper le rétroappel. |
Description
La commande New collection
crée une nouvelle collection vide ou préremplie et retourne sa référence.
Si vous ne passez aucun paramètre, New collection
crée une collection vide et retourne sa référence.
Vous devez affecter la référence retournée à une variable 4D de type Collection.
N'oubliez pas que les instructions
var : Collection
ouC_COLLECTION
déclarent une variable du typeCollection
mais ne créent pas de collection.
Optionnellement, vous pouvez préremplir la nouvelle collection en passant une ou plusieurs value(s) comme paramètre(s).
Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement par affectation. Par exemple :
myCol[10]:="Mon nouvel élément"
Si l'indice du nouvel élément est au-delà du dernier élément existant de la collection, la collection est automatiquement redimensionnée et tous les nouveaux éléments intermédiaires sont reçoivent la valeur null.
Vous pouvez passer n'importe quel nombre de valeurs de n'importe quel type pris en charge (number, text, date, picture, pointer, object, collection...). Contrairement aux tableaux, les collections peuvent mélanger des données de différents types.
Vous devez prêter attention aux problèmes de conversion suivants :
- Si vous passez un pointeur, il est conservé "tel quel" ; il est évalué à l'aide de la commande
JSON Stringify
- Les dates sont stockées sous la forme de date « aaaa-mm-jj » ou des chaînes au format « AAAA-MM-JJTHH: ss.SSSZ: mm » , selon la configuration actuelle « dates à l'intérieur des objets » de la base de données. Lors de la conversion de dates 4D en texte avant de les stocker dans la collection, par défaut le programme prend en compte le fuseau horaire local. Vous pouvez modifier ce comportement en utilisant le sélecteur
Dates inside objects
de la commandeSET DATABASE PARAMETER
. - Si vous passez une heure, elle est stockée sous la forme d'un nombre de millisecondes (Réel).
Exemple 1
Vous souhaitez créer une nouvelle collection vide et l'assigner à une variable collection 4D :
var $myCol : Collection
$myCol:=New collection
//$myCol=[]
Exemple 2
Vous souhaitez créer une collection pré-remplie :
var $filledColl : Collection
$filledColl:=New collection(33;"mike";"november";->myPtr;Current date)
//$filledColl=[33,"mike","november","->myPtr","2017-03-28T22:00:00.000Z"]
Exemple 3
Vous souhaitez créer une nouvelle collection puis ajouter un élément :
var $coll : Collection
$coll:=New collection("a";"b";"c")
//$coll=["a","b","c"]
$coll[9]:="z" //ajouter un 10e élément avec la valeur "z"
$vcolSize:=$coll.length //10
//$coll=["a","b","c",null,null,null,null,null,null,"z"]
New shared collection
Historique
Release | Modifications |
---|---|
v16 R6 | Ajout |
New shared collection {( ...value : any )} : Collection
Paramètres | Type | Description | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Shared object, Shared collection | -> | Valeur(s) de la collection partagée |
Résultat | Collection | <- | La nouvelle collection partagée |
Description
La commande New shared collection
crée une nouvelle collection partagée vide ou préremplie et retourne sa référence.
L'ajout d'un élément à cette collection à l'aide de l'opérateur d'assignation doit être entouré de la structure Use...End use
, sinon une erreur est générée (cela n'est pas nécessaire lors de l'ajout d'éléments à l'aide de fonctions telles que push()
ou map()
car elles utilisent automatiquement une structure interne Use...End use). La lecture d'un élément sans structure Use...End use est cependant possible.
Pour plus d'informations sur les collections partagées, veuillez vous référer à la page Objets et collections partagés.
Si vous ne passez aucun paramètre, New shared collection
crée une collection vide et retourne sa référence.
Vous devez affecter la référence retournée à une variable 4D de type Collection.
N'oubliez pas que les instructions
var : Collection
ouC_COLLECTION
déclarent une variable du typeCollection
mais ne créent pas de collection.
Optionnellement, vous pouvez préremplir la nouvelle collection partagée en passant une ou plusieurs value(s) comme paramètre(s). Sinon, vous pouvez ajouter ou modifier des éléments ultérieurement via l'assignation en notation objet (cf. exemple).
Si l'indice du nouvel élément est au-delà du dernier élément existant de la collection partagée, la collection est automatiquement redimensionnée et tous les nouveaux éléments intermédiaires reçoivent la valeur null.
Vous pouvez passer tout nombre de valeurs de n'importe quel type pris en charge :
- nombre (réel, entier...). Les valeurs numériques sont toujours stockées sous forme de réels.
- text
- boolean
- date
- heure (stockée en nombre de milliseconds - réel)
- Null
- Si vous souhaitez que l'évaluation soit sensible à la casse ou pour différencier des caractères accentués, passez la constante
ck diacritical
dans le paramètre option. - $1.stop (booléen, optionnel) : true pour stopper le rétroappel de la méthode.
Contrairement aux collections standard (non partagées), les collections partagées ne prennent pas en charge les images, les pointeurs et les objets ou collections non partagés.
Exemple
$mySharedCol:=New shared collection("alpha";"omega")
Use($mySharedCol)
$mySharedCol[1]:="beta"
End use
.at()
Historique
Release | Modifications |
---|---|
20 | Ajout |
.at( index : Integer ) : any
Paramètres | Type | Description | |
---|---|---|---|
index | Integer | -> | Index de l'élément à renvoyer |
Résultat | any | <- | L'élément à cet index |
Description
La fonction .at()
retourne l'élément à la position index, acceptant des entiers positifs et négatifs.
Cette fonction ne modifie pas la collection d'origine.
Les nombres entiers négatifs déterminent la position à partir du dernier élément de la collection.
La fonction renvoie Undefined si index est au-delà des limites de la collection.
Exemple
var $col : Collection
$col:=New collection(10; 20; 30; 40; 50)
$element:=$col.at(0) // 10
$element:=$col.at(1) // 20
$element:=$col.at(-1) // 50
$element:=$col.at(-2) // 40
$element:=$col.at(10) // undefined
.average()
Historique
Release | Modifications |
---|---|
v16 R6 | Ajout |
.average( {propertyPath : Text } ) : Real
Paramètres | Type | Description | |
---|---|---|---|
propertyPath | Text | -> | Chemin de propriété d'objet à utiliser pour évaluer les valeurs |
Résultat | Real, Undefined | <- | Moyenne arithmétique des valeurs de la collection |
Description
La fonction .average()
retourne la moyenne arithmétique des valeurs définies dans l'instance de collection.
Seuls les éléments ayant une valeur numérique sont pris en compte pour le calcul (les autres types d'éléments sont ignorés).
Si la collection contient des objets, passez le paramètre propertyPath pour indiquer la propriété d'objet à prendre en compte.
.average()
retourne undefined
si:
- la collection est vide,
- la collection ne contient pas d'éléments numériques,
- propertyPath n'est pas trouvé dans la collection.
Exemple 1
var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12
Exemple 2
var $col : Collection
$col:=New collection
$col.push(New object("name";"Smith";"salary";10000))
$col.push(New object("name";"Wesson";"salary";50000))
$col.push(New object("name";"Gross";"salary";10500))
$vAvg:=$col.average("salary") //23500