Cálculos en las colecciones

Traducido automáticamente de Deepl

Calcular la media, el total o el precio (incluyendo los impuestos) son tareas habituales en cualquier aplicación empresarial. Las colecciones son una manera fácil de agregar sus datos de una manera consistente. Con ellas, este tipo de cálculos se vuelve muy sencillo, ya que existen métodos de colección que lo hacen todo por ti.

Este artículo es parte de una serie que demuestra cómo manipular colecciones utilizando los métodos añadidos en 4D v16 R6. Para aprender aún más, descarga nuestro ejemplo de base de datos, que incluye 12 ejemplos diferentes para mostrar todo lo que puedes hacer con los métodos de colección.

Ejemplo de base de datos: Manejar colecciones

suma, promedio, mínimo y máximo

Puedes calcular la suma de todos los valores de una colección con el método sum método:

// Calcular la suma de todos los elementos de una colección de valores numéricos
$col:=Nuevacolección(10000;50000;10500.5)
$vSum:=$col.sum() //$vSum=70500.5

// Calcular la suma de todos los elementos de una colección de objetos
$col:=Nuevacolección("nombre"; "Smith"; "salario";10000)
$col.push(Nuevo objeto("nombre"; "Wesson"; "salario";50000))
$col.push(Nuevo objeto("nombre"; "Gross"; "salario";10500.5))
$vSum:=$col.sum("salario") //$vSum=70500.5

También puedes calcular la media, el mínimo y el máximo de la misma manera, con métodos de colección del mismo nombre.

El método average devuelve la media aritmética (promedio) de todos los valores de la colección:

$col:=Nuevacolección(10000;50000;10500.5)
$vAvg:=$col.average() //$vAvg=23500.16666667

El método min devuelve el elemento con el menor valor de la colección:

$col:=Nuevacolección(10000;50000;10500.5)
$vMin:=$col.min() // $vMin=10000

El método max devuelve el elemento con el valor más alto de la colección:

$col:=Nuevacolección(10000;50000;10500.5)
$vMax:=$col.max() // $vMax=50000

Contar elementos en una colección

Si se quiere saber el número de elementos que contiene una colección, basta con utilizar count para encontrar el número de elementos no nulos y length para el número total de elementos.

$col:=Nuevacolección(1;2;3;Nula; "a"; "b";Nula)
$length:=$col.length // $length=7 length es un atributo
$count:=$col.count() // $count=5 count es un método

También puede contar el número de veces que se utiliza un valor específico en la colección utilizando countValues:

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

Cálculos específicos

Otros dos métodos de colección permiten aplicar una devolución de llamada a todos los elementos de una colección. Básicamente, el método de devolución de llamada es uno de sus métodos de proyecto. No es necesario que escriba un bucle, 4D se encarga de ello por usted:

El método map aplica la llamada a cada elemento de la colección y devuelve una colección con todos los nuevos elementos. Por ejemplo, si necesita calcular el porcentaje de cada número de una colección en función de la suma total, es fácil utilizando map:

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

donde Porcentaje es un método de proyecto como el siguiente

$1.resultado:=Ronda(($1.valor/$2)*100;2)

El método reduce aplica una llamada de retorno contra un acumulador y cada elemento de la colección (de izquierda a derecha) para reducirla a un solo elemento. Por ejemplo, en una colección con varios productos mezclados, puede querer calcular la cuenta de cada producto. El método reduce lo hace muy sencillo:

$fruits:=Nuevacolección("plátano"; "cereza"; "naranja"; "manzana"; "cereza"; "naranja"; "manzana"; "plátano"; "cereza"; "naranja"; "higo" )
$count:=$fruits.reduce("Tally";Nuevo objeto) // use Tally as call back method
//$count={plátano:2,cereza:3,naranja:3,manzana:2,higo:1}

donde Tally es un método de proyecto como el siguiente:

// Busca si ya existe una fruta con este nombre en la colección de acumuladores
Si ($1.acumulador[$1.valor]#Null)
$1.acumulador[$1.valor]:=$1.acumulador[$1.valor]+1
Else
// Si no existe ya, crea una nueva fruta
$1.acumulador[$1.valor]:=1
End if

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se unió al equipo de 4D Program en noviembre de 2016. Como Product Owner, está a cargo de escribir las historias de usuario y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la característica entregada cumple con las necesidades del cliente. Después de obtener una licenciatura en Ciencias de la Computación en el CNAM, Fabrice se unió a una pequeña empresa de publicación de software como desarrollador Windev. A continuación, trabajó para diferentes empresas del sector industrial y comercial como desarrollador de Windev y de la web, así como asesor técnico de nuevas funcionalidades.