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!
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