Loop, loop e… ancora loop!

Tradotto automaticamente da Deepl

Come molti altri linguaggi di programmazione, 4D offre la possibilità di iterare sui numeri con un’istruzione For(…) / End for o su una condizione grazie ai comandi While(…)/End while e Repeat/Until(…) e. Queste iterazioni (o loop) sono molto utili, ma non sono il modo più appropriato per iterare su tipi di dati avanzati come collezioni e selezioni di entità. Per questo motivo è stato creato il nuovo For each(…)/End for each è stato creato per facilitare la codifica!

Esempio di database

Looping THROUGH elementi della raccolta

L’istruzione For each / End for each può essere utilizzata in diversi casi. Un caso è quello di eseguire il looping degli elementi di una collezione. Non è necessario sapere in anticipo quanti elementi appartengono alla collezione prima di entrare nel ciclo. A ogni iterazione, la variabile passata come primo parametro(item) verrà riempita con l’elemento corrente della collezione(col).

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

Looping attraverso le entità

Il secondo caso è anche il più recente: il looping attraverso le entità di una selezione di entità. Le entità e le selezioni di entità fanno parte di un nuovo concetto di 4D, descritto in questo post del blog. La cosa principale da sapere è che le entità sono simili ai record e le selezioni di entità possono essere paragonate alle selezioni tradizionali , ma sono entrambe dichiarate come oggetti!

Anche in questo caso, non è necessario sapere in anticipo quante entità appartengono alla selezione di entità prima di entrare nel ciclo. A ogni iterazione, la variabile entità passata come primo parametro verrà automaticamente riempita con l’entità corrente della selezione di entità.

UK_emps:=ds.Employees.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

Passare in rassegna le proprietà dell’oggetto

L’istruzione For each / End for each può essere utilizzata anche in un altro caso: il ciclo delle proprietà degli oggetti. Ad esempio, può essere molto utile nel caso in cui si voglia scrivere del codice generico, senza conoscere in anticipo i nomi delle proprietà dell’oggetto.

Anche in questo caso, non è necessario sapere in anticipo quante proprietà ha un oggetto prima di entrare nel ciclo! Tutti i nomi delle proprietà verranno analizzati uno per uno! A ogni iterazione, la variabile passata come primo parametro(property nell’esempio seguente) sarà riempita con il nome dell’attributo dell’oggetto($contatto nell’esempio seguente).

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
- Product Owner ed esperto di 4D - Dopo aver studiato elettronica, Roland è passato all'IT industriale come sviluppatore e consulente, realizzando soluzioni per i clienti con una varietà di database e tecnologie. Alla fine degli anni '80 si è innamorato di 4D e lo ha utilizzato per scrivere applicazioni aziendali che includono sistemi di contabilità, fatturazione e posta elettronica. Entrato a far parte dell'azienda nel 1997, Roland ha dato il suo prezioso contributo progettando specifiche, strumenti di test e demo, oltre a formare e parlare alla comunità 4D in occasione di numerose conferenze. Continua a plasmare attivamente il futuro di 4D definendo nuove funzionalità e strumenti di sviluppo di database.