Calculs dans les collections

Traduit automatiquement de Deepl

Calculer la moyenne, le total ou le prix (y compris la taxe) sont des tâches courantes dans toute application commerciale. Les collections sont un moyen facile d’agréger vos données de manière cohérente. Avec elles, ce type de calcul devient très simple, car il existe des méthodes de collection qui font tout pour vous !

Cet article fait partie d’une série démontrant comment manipuler les collections à l’aide des méthodes ajoutées dans 4D v16 R6. Pour en savoir encore plus, téléchargez notre exemple de base de données, qui comprend 12 exemples différents pour montrer tout ce que vous pouvez faire avec les méthodes de collecte !

Exemple de base de données : Gérer des collections

somme, moyenne, min et max

Vous pouvez calculer la somme de toutes les valeurs d’une collection avec la méthode sum méthode :

// Calcul de la somme de tous les éléments d'une collection de valeurs numériques
$col:=Newcollection(10000;50000;10500.5)
$vSum:=$col.sum() //$vSum=70500.5

// Calcul de la somme de tous les éléments d'une collection d'objets
$col:=Newcollection("name" ; "Smith" ; "salary";10000)
$col.push(Nouvel objet("nom" ; "Wesson" ; "salaire";50000))
$col.push(Nouvel objet("nom" ; "Gross" ; "salaire";10500.5))
$vSum:=$col.sum("salaire") //$vSum=70500.5

Vous pouvez également calculer la moyenne, le minimum et le maximum de la même manière, avec des méthodes de collection du même nom.

La méthode average renvoie la moyenne arithmétique (moyenne) de toutes les valeurs d’une collection :

$col:=Newcollection(10000;50000;10500.5)
$vAvg:=$col.average() // $vAvg=23500.16666667

La méthode min renvoie l’élément ayant la plus petite valeur dans la collection :

$col:=Newcollection(10000;50000;10500.5)
$vMin:=$col.min() // $vMin=10000

La méthode max renvoie l’élément dont la valeur est la plus élevée de la collection :

$col:=Newcollection(10000;50000;10500.5)
$vMax:=$col.max() // $vMax=50000

Compter les éléments d’une collection

Si vous souhaitez connaître le nombre d’éléments que contient une collection, il suffit d’utiliser la méthode count pour trouver le nombre d’éléments non nuls et length pour le nombre total d’éléments.

$col:=Newcollection(1;2;3;Null; "a" ; "b" ;Null)
$length:=$col.length // $length=7 length est un attribut
$count:=$col.count() // $count=5 count est une méthode

Vous pouvez également compter le nombre de fois qu’une valeur spécifique est utilisée dans votre collection en utilisant la méthode countValues:

$col:=Newcollection(1;2;5;5;5;3;6;4)
$vCount:=$col.countValues(5) // $vCount=3

Calculs spécifiques

Deux autres méthodes de collection vous permettent d’appliquer un rappel sur tous les éléments d’une collection. En gros, la méthode de rappel est une des méthodes de votre projet. Pas besoin d’écrire une boucle, 4D s’en occupe pour vous :

La méthode map applique le rappel sur chaque élément de la collection et renvoie une collection avec tous les nouveaux éléments. Par exemple, si vous avez besoin de calculer le pourcentage pour chaque nombre dans une collection en fonction de la somme totale, c’est facile en utilisant map:

$c:=Newcollection(1;4;9;10;20)
$c2:=$c.map("Percentage" ;$c.sum()). // use Percentage as call back method
//$c2=[2.27,9.09,20.45,22.73,45.45]

Percentage est une méthode de projet comme suit :

$1.result:=Round(($1.value/$2)*100;2)

La méthode reduce applique un callback contre un accumulateur et chaque élément de la collection (de gauche à droite) pour la réduire à un seul élément. Par exemple, dans une collection contenant plusieurs produits mélangés, vous pouvez vouloir calculer le total de chaque produit. La méthode reduce rend les choses très simples :

$fruits:=Nouvellecollection("banane" ; "cerise" ; "orange" ; "pomme" ; "cerise" ; "orange" ; "pomme" ; "banane" ; "cerise" ; "orange" ; "fig" )
$count:=$fruits.reduce("Tally" ;Nouvel objet) // use Tally as call back method
//$count={banane:2,cerise:3,orange:3,pomme:2,fig:1}

Tally est une méthode de projet comme suit :

// Recherche si un fruit portant ce nom existe déjà dans la collection d'accumulateurs
If ($1.accumulator[$1.value]#Null)
$1.accumulator[$1.value]:=$1.accumulator[$1.value]+1
Else
// S'il n'existe pas déjà, crée un nouveau fruit
$1.accumulator[$1.value]:=1
End if

Fabrice Mainguené
- Product Owner -Fabrice Mainguené a rejoint l'équipe du programme 4D en novembre 2016. En tant que Product Owner, il est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Après avoir obtenu une licence en informatique au CNAM, Fabrice a rejoint une petite société d'édition de logiciels en tant que développeur Windev. Il a ensuite travaillé pour différentes entreprises dans les domaines de l'industrie et du commerce en tant que développeur Windev et web ainsi que conseiller technique sur les nouvelles fonctionnalités.