Novas funções úteis para colecções!

Tradução automática de Deepl

As funções associadas às colecções foram introduzidas com 4D v16 R6 e evoluíram com a possibilidade de utilizar fórmulas para algumas delas, como map() ou reduce(). 4D v20 traz outras características igualmente práticas, que apresentaremos aqui.

Base de dados de amostras

First() et last()

As duas funções, first() e last(), como os seus nomes indicam, permitem o acesso ao primeiro e ao último elemento de uma colecção. Ao contrário da utilização de índices e parênteses (col[0], col[col.length-1]), não há risco de erro se a colecção estiver vazia. Neste caso, o valor undefined será simplesmente devolvido pelas funções.

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

AT()

O at() é também uma alternativa aos parênteses rectos (col[x]) com um benefício; o valor pode ser negativo para obter os itens a partir do fim.
Tal como as funções first() e last(), o valor indefinido será devolvido (sem erro) no caso de uma colecção vazia ou transbordo de índice.

$first:=MyCollection.at(0)
$second:=MyCollection.at(1)
$third:=MyCollection.at(2) // might be undefined if collection contains only two items
$last:=MyCollection.at(-1)

Boas notícias: O at() também está disponível para a selecção de entidades!
A única diferença é que a função retorna Nula em vez de indefinida quando a selecção da entidade está vazia (ou em caso de transbordo de índice).

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

Flat()

O flat() é mais inovadora e será muito útil em alguns casos. Permite a aplanação de colecções que podem conter colecções (que também podem incluir colecções, etc.).

Por defeito, o número de níveis da colecção original é reduzido em um. Assim, algumas colecções podem permanecer no resultado. Mas a função aceita um parâmetro para compensar este facto.

$flatCollection:=$nestedCollection.flat()    // might still contain collections
$flatCollection:=$nestedCollection.flat(MAXLONG) // all included collections will be flatten

Resultado (Antes / Depois)

incluDES()

O includes() é útil porque permite saber se uma colecção contém este ou aquele elemento de quase qualquer tipo… texto, numérico, data… e até referências de objectos ou colecções.

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

reduceRight()

Já conhece a função reduzir(), que lhe permite iterar automaticamente numa colecção para obter um resultado único de qualquer tipo: Uma cadeia, um valor numérico…

Esta função permite o mesmo estilo de cálculos mas digitaliza a colecção da direita para a esquerda (ou seja, começando pelo fim). Consoante o tipo de operação, os resultados podem ser bastante diferentes.

Em resumo, reduceRight() é o equivalente optimizado de reverse().reduce()

flatmap()

O map() permite (desde a versão 4Dv16 R6) criar uma colecção com base no conteúdo de outra colecção. O flatMap() permite-nos realizar, numa única operação, uma map() seguido de um flat() – uma função que mencionámos anteriormente.

É, portanto, o equivalente optimizado da função map().flat()

 

Conclusão

Estas novas funções, algumas das quais inspiradas pelo JavaScript, completam as grandes funções da colecção já presentes no 4D. Elas serão fundamentais para o seu desenvolvimento.

Não hesite em falar sobre isso no fórum 4D!

 

Roland Lannuzel
- Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.