Loops, loops e … mais loops!

Tradução automática de Deepl

Como muitas outras linguagens de programação, 4D fornece a capacidade de iterar sobre números com um For(…) / End for ou sobre uma condição, graças à While(…)/End while e Repeat/Until(…) palavras-chave. Estas iterações (ou loops) são muito úteis, mas não são a forma mais apropriada de iterar sobre tipos de dados avançados, tais como colecções e selecções de entidades. É por isso que as novas For each(…)/End for each iterator foi criado, para ajudar a facilitar a sua codificação!

Exemplo de base de dados

Laçando através de artigos de colecção

O For each / End for each declaração pode ser utilizada em vários casos. Um caso é o de fazer looping através de itens de uma colecção. Não há necessidade de ter conhecimento prévio de quantos itens pertencem à colecção antes de entrar no laço. Em cada iteração, a variável passada como primeiro parâmetro(item) será preenchida com o item actual da colecção(col).

col:=New collection("charlie"; "delta"; "uniforme"; "foxtrot"; "quebec")
$count :=0
For each (item;col)
If (Length(item)>5)
$count :=$count+1
End if
End for each
ALERT (
String( ($count)+" palavras encontradas!")

Atravesse entidades

O segundo caso é também o mais recente: looping através de entidades de uma selecção de entidades. Entidades e selecções de entidades fazem parte de um novo conceito em 4D, descrito neste post do blogue. O principal que precisa de saber é que as entidades são semelhantes aos registos, e as selecções de entidades podem ser comparadas às selecções tradicionais , mas ambas são declaradas como objectos!

Mais uma vez, não há necessidade de conhecimento prévio de quantas entidades pertencem à selecção da entidade antes de entrar no laço. Em cada iteração, a variável de entidade passada como primeiro parâmetro será automaticamente preenchida com a entidade actual da selecção da entidade.

UK_emps:=ds.Empregados.query("country='UK'")
// Browse the entity selection
For each (emp;UK_emps)
emp. salary :=emp.salary*1.03 // raise the salary
emp .save()
// save the result
End for each

Propriedades de looping Through object

O For each / End for each também pode ser usado noutro caso: looping através de propriedades de objectos. Por exemplo, pode ser muito útil no caso de querer escrever algum código genérico, sem conhecer previamente os nomes das propriedades dos objectos.

Mais uma vez, não há necessidade de saber antecipadamente quantas propriedades tem um objecto antes de entrar no laço! Os nomes de todas as suas propriedades serão analisados um a um! Em cada iteração, a variável passada como primeiro parâmetro(propriedade no exemplo abaixo) será preenchida com o nome do atributo do objecto($contacto no exemplo abaixo).

For each ($property;$contact)
If (Value type($contact[$property])=Is text)
//Change to uppercase each attribute which is a text
$contact[$property]:=Uppercase($contact[$property])
End if
End for each

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.