Nuevas funciones prácticas para las colecciones

Las funciones asociadas a las colecciones fueron introducidas con 4D v16 R6 y han evolucionado con la posibilidad de utilizar fórmulas para algunas de ellas, como map() o reduce(). 4D v20 trae otras funcionalidades igual de prácticas, que presentaremos aquí.

Ejemplo de base de datos

First() y last()

Las dos funciones first() y last() permiten, como su nombre lo indica, acceder al primer y al último elemento de una colección. A diferencia del uso de índices y corchetes (col[0], col[col.length-1]), no hay riesgo de error si la colección está vacía. En este caso, el valor undefined será simplemente devuelto por las funciones.

$first:=MyCollection.first()
$last:=MyCollection.last()

AT()

La función at() es también una alternativa a los corchetes (col[x]) con una ventaja; el valor puede ser negativo para obtener los elementos del final.
Al igual que las funciones first() y last(), el valor undefined será devuelto (sin error) en caso de colección vacía o desbordamiento del índice.

$first:=MyCollection.at(0)
$second:=MyCollection.at(1)
$third:=MyCollection.at(2) // puede ser undefined si la colección contiene sólo dos elementos
$last:=MyCollection.at(-1)

Buenas noticias: la función at() también está disponible para las selecciones de entidades.
La única diferencia es que la función devuelve Null en lugar de undefined cuando la selección de entidades está vacía (o en caso de desbordamiento del índice).

$es:=ds.Info.all()
$title1:=$es.at(0).title
$title2:=$es.at(1).title
$title3:=$es.at(2).title

Flat()

La función flat() es más innovadora y será muy útil en algunos casos. Permite aplanar colecciones que pueden contener colecciones (que también pueden incluir colecciones, etc.).

Por defecto, el número de niveles de la colección original se reduce en uno. Así que algunas colecciones pueden permanecer en el resultado. Pero la función acepta un parámetro para compensarlo.

$flatCollection:=$nestedCollection.flat()    // aún puede contener colecciones
$flatCollection:=$nestedCollection.flat(MAXLONG) // todas las colecciones incluidas se aplanarán

Resultado (Antes / Después)

incluDeS()

La función includes() es útil porque permite saber si una colección contiene tal o cual elemento de casi cualquier tipo… texto, numérico, fecha… e incluso referencias de objetos o colecciones.

$result:=colorsCol.includes("blue")
$result:=valuesCol.includes(10)
$result:=objectsCol.includes(myObjectRef)

reduceRight()

Ya conoce la función reduce(), que permite iterar automáticamente sobre una colección para obtener un resultado único de cualquier tipo: una cadena, un valor numérico…

Esta función permite el mismo estilo de cálculos, pero recorre la colección de derecha a izquierda (es decir, empezando por el final). Dependiendo del tipo de operación, los resultados pueden ser muy diferentes.

En resumen, reduceRight() es el equivalente optimizado de reverse().reduce()

flatmap()

La función map() permite (desde la versión 4Dv16 R6) crear una colección a partir del contenido de otra colección. La función flatMap() nos permite realizar, en una sola operación, un map() seguida de una flat() – una función que hemos mencionado antes.

Es, por tanto, el equivalente optimizado de la función map().flat()

 

Conclusión

Estas nuevas funciones, algunas de ellas inspiradas en JavaScript, completan la gran colección de funciones ya presentes en 4D. Serán fundamentales en su desarrollo.

¡No dude en comentarlo en el foro 4D!

 

Roland Lannuzel
- Propietario de Producto y Experto en 4D - Después de estudiar electrónica, Roland se dedicó a la informática industrial como desarrollador y consultor, construyendo soluciones para clientes con una variedad de bases de datos y tecnologías. A finales de los años 80 se enamoró de 4D y lo ha utilizado para escribir aplicaciones de negocio que incluyen sistemas de contabilidad, facturación y correo electrónico.Eventualmente se unió a la compañía en 1997, las valiosas contribuciones de Roland incluyen el diseño de especificaciones, herramientas de prueba, demos, así como la formación y hablar con la comunidad 4D en muchas conferencias. Continúa dando forma activamente al futuro de 4D definiendo nuevas características y herramientas de desarrollo de bases de datos.