Sfairadora

Cyklus for

for(Typ řídící_proměnná = DOMÉNA) tělo endfor
for(Typ řídící_proměnná = DOMÉNA & filtr) tělo endfor
for(Typ &řídící_proměnná = DOMÉNA) tělo endfor
for(Typ &řídící_proměnná = DOMÉNA & filtr) tělo endfor
DOMÉNA je některá z možností:
N0..Nlimit
N0, N1..Nlimit
N0..Nlimit by krok
sekvence
Cyklus for vytvoří řídící proměnnou s názvem zadaným identifikátorem řídící-proměnná. Do této proměnné jsou postupně přiřazovány hodnoty z určené domény. Pro každou hodnotu je vyhodnocena šablona tělo a její výsledek je přidán do výstupu.

Doména

Doménou je buď posloupnost čísel (celých či reálných) nebo sekvence. Posloupnost čísel je zadána buď jako interval daný první a poslední hodnotou (N0..Nlimit). V tom případě se procházejí čísla počínaje hodnotou N0 po jedné až k hodnotě Nlimit včetně této hodnoty. Pokud je hodnota Nlimit menší než hodnota N0, probíhá cyklus směrem dolů. Tímto způsobem tedy nelze nikdy zadat prázdný interval, smyčka projde vždy aspoň jednou. Pokud je zadána ještě hodnota N1, je z rozdílu N1–N0 určen krok, kterým se mají hodnoty procházet. Pokud by byla hodnota N1 větší než Nlimit, hodnoty N1 ani Nlimit, nebudou procházeny. Krok může být rovněž zadán přímo klauzulí by. Kromě čísel lze tímto způsobem zadávat též domény znaků (typ Char).
Příklady domén:
10..5 10, 9, 8, 7, 6, 5
0, 2..10 0, 2, 4, 6, 8, 10
0, 2..9 0, 2, 4, 6, 8
0, –1..10 prázdná doména, cyklus se neprovede ani jednou
1, 1.1..2 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0,
10..0 by –2 10, 8, 6, 4, 2, 0
'a'..'e' by 2 'a', 'c', 'e'
Doména zadaná jako sekvence může být buď odkaz na sekvenci (tabulku) v datech dokumentu, konstanta typu sekvence (např. {"leden", "únor", "březen"}), popřípadě samozřejmě libovolný výraz, jehož výsledkem je sekvence.
Hodnoty určující číselný interval a sekvenci jsou výrazy v jazyce Enki.

Řídící proměnná

Výraz Typ udává typ řídící proměnné. Pokud lze typ řídící proměnné odvodit ze zadání domény, není třeba jej uvádět. To je obzvlášť výhodné, pokud se prochází přes řádky tabulky, protože typ řádků tabulky může být poměrně složitá struktura.
Před názvem řídící proměnné může být zadán příznak &, který udává, že řídící proměnná prochází doménu odkazem, tedy že postupně obsahuje reference na procházené prvky místo jejich hodnot. Odkazem lze procházet pouze sekvenci, která je sama zadána referencí na datový objekt (l-hodnotou). Výhoda procházení sekvence odkazem je dvojí. Jednak lze během procházení měnit hodnotu prvků sekvence (což se však v šablonách nedoporučuje), jednak je pro složitější tabulky tento způsob procházení efektivnější, protože při procházení hodnotou se vždy hodnota celého řádku okopíruje do řídící proměnné.

Užití filtru

Doménu, přes kterou se iteruje, lze dále upravit pomocí filtru. Filtr se zapisuje za vlastní určení domény oddělený znakem &. Filtr je podmínka (výraz v jazyce Enki vracející hodnotu typu Bool), která určuje, zda se pro daný prvek má tělo vykonat. Pro každý prvek domény se nejprve vyhodnotí podmínka filtru a pokud je výsledek FALSE, tělo se nevyhodnocuje, ale přejde se na další prvek domény.
Užití filtru oproti podmínce uvnitř bloku má výhodu v tom, že se správně určuje, zda jde o poslední průchod cyklem při použití operátoru is_last_pass.

Poznámky

Pokud je za klíčovým slovem endfor uvedeno znaménko minus (endfor-), poslednímu odstavci výsledku posledního průchodu cyklu bude nastaven příznak „nedělit stránku před odstavcem“. Toho lze použít v případě, že cyklus for generuje seznam, aby se zabránilo umístění posledního prvku seznamu na samostatné stránce.
Místo endfor je přípustné psát rovněž end for.
Uvnitř konstrukce jazyka Enkidu is_first_pass, is_last_pass a pass_count ve vztahu k cyklu jazyka Enkidu stejně jako se používají ve vztahu k cyklu for jazyka Enki.

Viz též