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. El acceso a estas colecciones es controlado por estructuras Use...End use. 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