Collection
La clase Collection gestiona variables de tipo Collection.
Una colección se inicializa con:
New collection {( ...value : any )} : Collection crea una nueva colección vacía o precargada |
New shared collection {( ...value : any )} : Collection crea una nueva colección vacía o precargada compartida |
Ejemplo
var $colVar : Collection //creación de una variable 4D de tipo colección
$colVar:=New collection //inicialización de la colección y asignación a la variable 4D
Resumen
.at( index : Integer ) : any devuelve el elemento en la posición index, permitiendo enteros positivos y negativos |
.average( {propertyPath : Text } ) : Real devuelve la media aritmética (promedio) de los valores definidos en la instancia de la colección |
.clear() : Collection elimina todos los elementos de la instancia de la colección y devuelve una colección vacía |
.combine( col2 : Collection {; index : Integer } ) : Collection inserta elementos col2 al final o en la posición índice especificada en la instancia de la colección y devuelve la colección editada |
.concat( value : any { ;...valueN } ) : Collection elimina el último elemento de la colección y lo devuelve como resultado de la función |
.copy() : Collection .copy( option : Integer ) : Collection .copy( option : Integer ; groupWithCol : Collection ) : Collection .copy( option : Integer ; groupWithObj : Object ) : Collection devuelve una copia profunda de la instancia de la colección |
.count( { propertyPath : Text } ) : Real devuelve el número de elementos no nulos de la colección |
.countValues( value : any {; propertyPath : Text } ) : Real devuelve una nueva colección que contiene los elementos de la colección original con todos los elementos del parámetro valor añadidos al final |
.distinct( {options : Integer} ) : Collection .distinct( propertyPath : Text {; options : Integer } ) : Collection devuelve una colección que sólo contiene valores distintos (diferentes) de la colección original |
.equal( collection2 : Collection {; option : Integer } ) : Boolean compara collection con collection2 |
.every( { startFrom : Integer ; } formula : 4D.Function { ;...param : any } ) : Boolean .every( { startFrom : Integer ; } methodName : Text { ;...param : any } ) : Boolean devuelve true si todos los elementos de la colección han pasado con éxito una prueba implementada en el objeto formula o en el método methodName |
.extract( propertyPath : Text { ; option : Integer } ) : Collection .extract( propertyPath : Text ; targetPath : Text { ;...propertyPathOrTargetPathN : Text } ) : Collection crea y devuelve una nueva colección que contiene los valorespropertyPath extraídos de la colección original de objetos |
.fill( value : any ) : Collection .fill( value : any ; startFrom : Integer { ; end : Integer } ) : Collection llena la colección con el valor especificado, opcionalmente desde el índice startFrom hasta el índice end, y devuelve la colección resultante |
.filter( formula : 4D.Function { ; ...param : any } ) : Collection .filter( methodName : Text { ; ...param : any } ) : Collection devuelve una nueva colección que contiene todos los elementos de la colección original para los que la formula o methodName resultante es true |
.find( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : any .find( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : any devuelve el primer valor de la colección cuyo resultado formula o methodName, aplicado a cada elemento, devuelve true |
.findIndex( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Integer .findIndex( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Integer devuelve el índice, en la colección, del primer valor para el que la formula o methodName, aplicada a cada elemento, devuelve true |
.first() : any devuelve el primer elemento de la colección |
.flat( { depth : Integer } ) : Collection crea una nueva colección con todos los elementos de la subcolección concatenados en ella recursivamente hasta la profundidad especificada |
.flatMap( formula : 4D.Function { ; ...param : any } ) : Collection .flatMap( methodName : Text { ; ...param : any } ) : Collection crea una nueva colección basada en el resultado de la llamada a la función 4D formula o al método methodName sobre cada elemento de la colección original y aplanada en una profundidad de 1 |
.includes( toSearch : expresión { ; startFrom : entero } ) : Booleano devuelve True si la expresión toSearch se encuentra entre los elementos de la colección; en caso contrario, False |
.indexOf( toSearch : expression { ; startFrom : Integer } ) : Integer busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la primera ocurrencia encontrada, o -1 si no se encontró |
.indices( queryString : Text { ; ...value : any } ) : Collection devuelve los índices, en la colección original, de los elementos de la colección de objetos que coinciden con las condiciones de búsqueda de queryString |
.insert( index : Integer ; element : any ) : Collection inserta element en la posición índice especificada en la instancia de la colección y devuelve la colección editada |
.join( delimiter : Text { ; option : Integer } ) : Text convierte todos los elementos de la colección en cadenas y los concatena utilizando el delimitador especificado cadena como separador |
.last() : any devuelve el último elemento de la colección |
.lastIndexOf( toSearch : expression { ; startFrom : Integer } ) : Integer busca la expresión toSearch entre los elementos de la colección y devuelve el índice de la última aparición |
.length: Integer devuelve el número de elementos de la colección |
.map( formula : 4D.Function { ; ...param : any } ) : Collection .map( methodName : Text { ; ...param : any } ) : Collection crea una nueva colección basada en el resultado de la llamada a la fórmula ** 4D función o methodName método en cada elemento de la colección original |
.max( { propertyPath : Text } ) : any devuelve el elemento con el valor más alto de la colección |
.min( { propertyPath : Text } ) : any devuelve el elemento con el menor valor de la colección |
.orderBy( ) : Collection .orderBy( pathStrings : Text ) : Collection .orderBy( pathObjects : Collection ) : Collection .orderBy( ascOrDesc : Integer ) : Collection devuelve una nueva colección que contiene todos los elementos de la colección en el orden especificado |
.orderByMethod( formula : 4D.Function { ; ...extraParam : expression } ) : Collection .orderByMethod( methodName : Text { ; ...extraParam : expression } ) : Collection devuelve el primer valor de la colección cuyo resultado formula o methodName, aplicado a cada elemento, devuelve true |
.pop() : any elimina el último elemento de la colección y lo devuelve como resultado de la función |
.push( element : any { ;...elementN } ) : Collection añade uno o más elemento(s) al final de la instancia de la colección y devuelve la colección editada |
.query( queryString : Text ; ...value : any ) : Collection .query( queryString : Text ; querySettings : Object ) : Collection devuelve todos los elementos de una colección de objetos que coinciden con las condiciones de búsqueda |
.reduce( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any .reduce( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any aplica la *formula * o callback methodName contra un acumulador y cada elemento de la colección (de izquierda a derecha) para reducirlo a un único valor |
.reduceRight( formula : 4D.Function { ; initValue : any { ; ...param : expression }} ) : any .reduceRight( methodName : Text { ; initValue : any { ; ...param : expression }} ) : any aplica la *formula * o retrollamada methodName contra un acumulador y cada elemento de la colección (de derecha a izquierda) para reducirlo a un único valor |
.remove( index : Integer { ; howMany : Integer } ) : Collection inserta element en la posición índice especificada en la instancia de la colección y devuelve la colección editada |
.resize( size : Integer { ; defaultValue : any } ) : Collection define la longitud de la colección al nuevo tamaño especificado y devuelve la colección redimensionada |
.reverse( ) : Collection devuelve una copia profunda de la colección con todos sus elementos en orden inverso |
.shift() : any elimina el primer elemento de la colección y lo devuelve como resultado de la función |
.slice( startFrom : Integer { ; end : Integer } ) : Collection devuelve una parte de una colección en una nueva colección |
.some( { startFrom : Integer ; } formula : 4D.Function { ; ...param : any } ) : Boolean .some( { startFrom : Integer ; } methodName : Text { ; ...param : any } ) : Boolean devuelve el número de elementos de la colección |
.sort() : Collection .sort( formula : 4D.Function { ; ...extraParam : any } ) : Collection .sort( methodName : Text { ; ...extraParam : any } ) : Collection ordena los elementos de la colección original y también devuelve la colección ordenada |
.sum( { propertyPath : Text } ) : Real devuelve la suma de todos los valores de la instancia de la colección |
.unshift( value : any { ;...valueN : any } ) : Collection inserta el valor dado al principio de la colección |
Nueva colección
New collection {( ...value : any )} : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Object, Collection, Picture, Pointer | -> | Valor(es) de collection |
Result | Collection | <- | La nueva colección |
|
Descripción
El comando New collection
crea una nueva colección vacía o precargada y devuelve su referencia.
Si no se pasa ningún parámetro, New collection
crea una colección vacía y devuelve su referencia.
Debe asignar la referencia devuelta a una variable 4D del tipo Collection.
Tenga en cuenta que las instrucciones
var : Collection
orC_COLLECTION
declaran una variable de tipoCollection
pero no crea ninguna colección.
Opcionalmente, puede prellenar la nueva colección pasando uno o varios valores como parámetro(s).
De lo contrario, puede añadir o modificar elementos posteriormente por asignación. Por ejemplo:
myCol[10]:="My new element"
Si el nuevo índice del elemento está más allá del último elemento existente de la colección, la colección se redimensiona automáticamente y a todos los nuevos elementos intermedios se les asigna un valor null.
Puede pasar cualquier número de valores de todos los tipos soportados (number, text, date, picture, pointer, object, collection...). A diferencia de los arrays, las colecciones pueden mezclar datos de diferentes tipos.
Debe prestar atención a los siguientes aspectos de la conversión:
- Si pasa un puntero, se mantiene "tal cual"; se evalúa con el comando
JSON Stringify
- Las fechas se almacenan como fechas "aaaa-mm-dd" o de cadenas con el formato "AAAA-MM-DDTHH:mm:ss.SSSZ", según la configuración actual "fechas dentro de los objetos" de la base de datos. Al convertir las fechas 4D en texto antes de almacenarlas en la colección, por defecto el programa tiene en cuenta la zona horaria local. Puede modificar este comportamiento utilizando el selector
Dates inside objects
del comandoSET DATABASE PARAMETER
. - Si pasa un tiempo, se almacena como un número de milisegundos (Real).
Ejemplo 1
Quiere crear una nueva colección vacía y asignarla a una variable colección 4D:
var $myCol : Collection
$myCol:=New collection
//$myCol=[]
Ejemplo 2
Quiere crear una colección precargada:
var $filledColl : Collection
$filledColl:=New collection(33;"mike";"november";->myPtr;Current date)
//$filledColl=[33,"mike","november","->myPtr","2017-03-28T22:00:00.000Z"]
Ejemplo 3
Se crea una nueva colección y se añade un nuevo elemento:
var $coll : Collection
$coll:=New collection("a";"b";"c")
//$coll=["a","b","c"]
$coll[9]:="z" //añadir un décimo elemento con valor "z"
$vcolSize:=$coll.length //10
//$coll=["a","b","c",null,null,null,null,null,null,"z"]
New shared collection
Histórico
Lanzamiento | Modificaciones |
---|---|
v16 R6 | Añadidos |
New shared collection {( ...value : any )} : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
value | Number, Text, Date, Time, Boolean, Shared object, Shared collection | -> | Valor(es) de la collection compartida |
Result | Collection | <- | La nueva colección compartida |
|
Descripción
El comando New shared collection
crea una nueva colección vacía o precargada compartida y devuelve su referencia.
La adición de un elemento a esta colección utilizando el operador de asignación debe estar rodeada por la estructura Use...End use
, de lo contrario se genera un error (esto no es necesario cuando se añaden elementos utilizando funciones como push()
o map()
porque activan automáticamente una estructura interna Use...End use). Sin embargo, es posible leer un elemento sin una estructura Use...End use.
Para más información sobre las colecciones compartidas, consulte la página Objetos y colecciones compartidos.
Si no se pasa ningún parámetro, New shared collection
crea una colección compartida vacía y devuelve su referencia.
Debe asignar la referencia devuelta a una variable 4D del tipo Collection.
Tenga en cuenta que las instrucciones
var : Collection
orC_COLLECTION
declaran una variable de tipoCollection
pero no crea ninguna colección.
Opcionalmente, puede prellenar la nueva colección compartida pasando uno o varios valores como parámetro(s). De lo contrario, puede añadir o modificar elementos posteriormente por asignación notación objeto (ver ejemplo).
Si el nuevo índice del elemento está más allá del último elemento existente de la colección compartida, la colección se redimensiona automáticamente y a todos los nuevos elementos intermedios se les asigna un valor null.
Puede pasar cualquier número de valores de los siguientes tipos soportados:
- number (real, longint...). Los valores numéricos se almacenan siempre como reales.
- text
- boolean
- date
- time (almacenado como número de milisegundos - real)
- null
- objeto compartido
- colección compartida
Esta función modifica la colección original.
Ejemplo
$mySharedCol:=New shared collection("alpha";"omega")
Use($mySharedCol)
$mySharedCol[1]:="beta"
End use
.at()
Histórico
Lanzamiento | Modificaciones |
---|---|
20 | Añadidos |
.at( index : Integer ) : any
Parámetros | Tipo | Descripción | |
---|---|---|---|
index | Integer | -> | Índice del elemento a devolver |
Result | any | <- | El elemento en ese índice |
|
Descripción
La función .at()
devuelve el elemento en la posición index, permitiendo enteros positivos y negativos.
Esta función no modifica la colección original.
Los números enteros negativos cuentan hacia atrás desde el último elemento de la colección.
La función devuelve Undefined si el index sobrepasa los límites de la colección.
Ejemplo
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) // indefinido
.average()
Histórico
Lanzamiento | Modificaciones |
---|---|
v16 R6 | Añadidos |
.average( {propertyPath : Text } ) : Real
Parámetros | Tipo | Descripción | |
---|---|---|---|
propertyPath | Text | -> | Ruta de la propiedad del objeto que se utilizará para el cálculo |
Result | Real, Undefined | <- | Media aritmética (promedio) de los valores de la colección |
|
Descripción
La función .average()
devuelve la media aritmética (promedio) de los valores definidos en la instancia de la colección.
Para el cálculo sólo se tienen en cuenta los elementos numéricos (se ignoran otros tipos de elementos).
Si la colección contiene objetos, pasa el parámetro propertyPath para indicar la propiedad del objeto a tener en cuenta.
.average()
devuelve undefined
if:
- la colección está vacía,
- la colección no contiene elementos numéricos,
- propertyPath no se encuentra en la colección.
Ejemplo 1
var $col : Collection
$col:=New collection(10;20;"Monday";True;6)
$vAvg:=$col.average() //12
Ejemplo 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