Saltar al contenido principal
Versión: 18

Collection

Las colecciones son listas ordenadas de valores de tipos similares o diferentes (texto, número, objeto, booleano, colección o null).

Para gestionar las variables de tipo Colección se debe utilizar la notación de objetos (ver Sintaxis-básica).

Para acceder a un elemento de la colección, hay que pasar el número del elemento entre corchetes:

collectionRef[expression]

Puede pasar toda expresión 4D válida que devuelva un entero positivo en la expresión. Ejemplos:

 myCollection[5]  //acceso al 6º elemento de la colección
myCollection[$var]

Atención: los elementos de la colección están numerados desde 0.

Puede asignar un valor a un elemento de la colección u obtener el valor de un elemento de la colección utilizando la notación de objetos:

 myCol[10]:="My new element"
$myVar:=myCol[0]

Si se asigna un índice de elemento que sobrepasa el ú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 nulo:

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

Inicialización

Las colecciones deben haber sido inicializadas, por ejemplo utilizando el comando New collection, de lo contrario al intentar leer o modificar sus elementos se generará un error de sintaxis.

Ejemplo:

 C_COLLECTION($colVar) //creación de una variable 4D de tipo colección
$colVar:=Nueva colección //inicialización de la colección y asignación a la variable 4D

Colección estándar o compartida

Puede crear dos tipos de colecciones:

  • colecciones estándar (no compartidas), utilizando el comando New collection. Estas colecciones pueden ser editadas sin ningún control de acceso específico, pero no pueden ser compartidas entre procesos.
  • colecciones compartidas, utilizando el comando New shared collection. Estas colecciones pueden ser compartidas entre procesos, incluidos los hilos apropiativos. These collections can be shared between processes, including preemptive threads. Para más información, consulte la sección Objetos y colecciones compartidos.

Métodos de colección

Las referencias a colecciones 4D se benefician de métodos especiales (a veces llamados funciones miembro). Gracias a la notación de objetos, estos métodos pueden aplicarse a las referencias de la colección utilizando la siguiente sintaxis:

{$result:=}myCollection.memberFunction( {params} )

Tenga en cuenta que, aunque no tenga parámetros, una función miembro debe ser llamada con paréntesis (), de lo contrario se genera un error de sintaxis.

Por ejemplo:

$newCol:=$col.copy() //copia de $col a $newCol
$col.push(10;100) //añade de 10 y 100 a la colección

Algunos métodos devuelven la colección original después de la modificación, para que pueda ejecutar las llamadas en una secuencia:

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

parámetro rutaPropiedad

Varios métodos aceptan una propertyPath como parámetro. Este parámetro significa:

  • o bien un nombre de propiedad del objeto, por ejemplo "apellido"
  • o una ruta de propiedades del objeto, es decir, una secuencia jerárquica de subpropiedades vinculadas con caracteres de punto, por ejemplo "empleado.hijos.nombre".

Atención: cuando se utilizan métodos y parámetros propertyPath, no se puede utilizar ".", "[ ]", o espacios en los nombres de las propiedades ya que impedirá que 4D analice correctamente la ruta:

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