Smyčky, smyčky a … další smyčky!

Automaticky přeloženo z Deepl

Stejně jako mnoho jiných programovacích jazyků poskytuje 4D možnost iterace nad čísly pomocí příkazu For(…) / End for příkazem nebo nad podmínkou díky While(…)/End while a Repeat/Until(…) klíčových slov. Tyto iterace (nebo cykly) jsou velmi užitečné, ale nejsou nejvhodnějším způsobem iterace nad pokročilými datovými typy, jako jsou kolekce a výběry entit. Proto se objevil nový For each(…)/End for each byl vytvořen iterátor, který vám usnadní kódování!

Příklad databáze

Procházení smyčkou přes položky kolekce

Stránka For each / End for each lze použít v několika případech. Jedním z případů je procházení položek kolekce ve smyčce. Před vstupem do smyčky není třeba předem znát, kolik položek do kolekce patří. Při každé iteraci se proměnná předaná jako první parametr(item) naplní aktuální položkou kolekce(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)+" nalezena slova!")

Procházení entitami ve smyčce

Druhý případ je také nejnovější: cyklování přes entity výběru entit. Entity a výběry entit jsou součástí nového konceptu v systému 4D, který je popsán v tomto příspěvku na blogu. Hlavní věc, kterou potřebujete vědět, je, že entity jsou podobné záznamům a výběry entit lze přirovnat k tradičním výběrům, ale obojí je deklarováno jako objekty!

Opět není třeba před vstupem do smyčky předem znát, kolik entit patří do výběru entit. Při každé iteraci se proměnná entity předaná jako první parametr automaticky naplní aktuální entitou výběru 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

Procházení smyčkou přes vlastnosti objektu

Na adrese For each / End for each lze použít i v jiném případě: při procházení smyčky přes vlastnosti objektu. Může být například velmi užitečný v případě, že chcete napsat nějaký obecný kód, aniž byste předem znali názvy vlastností objektu.

Opět není třeba předem vědět, kolik vlastností má objekt před vstupem do smyčky! Názvy všech jeho vlastností budou rozebrány postupně! Při každé iteraci bude proměnná předaná jako první parametr(property v příkladu níže) naplněna názvem atributu objektu($contact v příkladu níže).

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 & 4D Expert - Po studiu elektroniky se Roland věnoval průmyslovým IT jako vývojář a konzultant, který vytvářel řešení pro zákazníky s různými databázemi a technologiemi. Koncem 80. let se zamiloval do 4D a používal jej při psaní podnikových aplikací, které zahrnovaly účetní, fakturační a e-mailové systémy. nakonec se připojil ke společnosti v roce 1997 a Rolandův cenný přínos zahrnuje návrh specifikací, testovacích nástrojů, demoverzí a také školení a přednášky pro komunitu 4D na mnoha konferencích. Nadále aktivně utváří budoucnost 4D definováním nových funkcí a nástrojů pro vývoj databází.