Forte

Alapvető vezérlési szerkezetek

Szekvencia:

A szekvenciákat pontosvesszővel választjuk el egymástól. Elsődleges szerepe a helyi utasítások csoportba foglalásában, illetve a kivételkezelésben van. Ennek segítségével blokkokra lehet a szabdalni a kódot és minden blokkhoz megfelelő kivételkezelőt rendelni. Szintaxisa:
BEGIN [statement;]... EXCEPTION [WHEN változó_név: osztály DO utasítás_blokk]... [ELSE [DO] utasítás_blokk] END;

Elágazás

Mint a legtöbb nyelvben, itt is kétféle elágazás lehetséges. Egyik elágazás típus sem teszi lehetővé, hogy a vezérlés rácsorogjon a következő vezérlési ágra. Az egyik az 'if', amely akkor hajtódik végre, ha a logikai kifejezés értéke igaz. Az 'if' szintaxisa:
IF logikai_kifejezés THEN utasítás_blokk [ELSEIF logikai_kifejezés THEN utasítás_blokk]... [ELSE [DO] utasítás_blokk] [kivétel_kezelés] END [IF];

Példa:

t : TextData = new(); line_size : integer = file.ReadLine(t, FALSE); if line_size

A másik elágazási lehetőség a 'case'. A Forté nyelv esetében csak integer típusú számok vizsgálatára alkalmas, szemben más nyelvekkel, ez a nyelv nem támogatja a karakterek vizsgálatát. A 'case' szintaxisa:

[label:] CASE integer_kifejezés [IS] [WHEN érték DO utasítás_blokk]... [ELSE [DO] utasítás_blokk] [kivétel_kezelés] END [CASE];

Példa:

t : TextData = new(); line_size : integer = file.ReadLine(t, FALSE); case line_size is when -1 do // file vége; when 0 do // üres sor else do // van a sorban karakter end case;

Ciklusok

A Forté-ben csak elöltesztelő ciklusok léteznek. Általános ciklus nem létezik. A ciklusfeltételnek logikai értékeknek kell lenniük. Egyik ciklus sem biztosítja a ciklusváltozók változtathatatlanságát. Az egyik használatos ciklus a 'for', amelyben a ciklusváltozó értéke kilépéskor elvész. A 'for' az utasitásblokkot annyiszor hajtja végre, ahány eleme van a tömbnek, igy vagy a tömb minden objektumán megy végig, vagy a cursor minden során, vagy pedig a 'select' utasítás eredmenyének sorain. Illetve minden egyes értéket felvesz adott intervallumon belül. Ennek megfelelően három különböző szintaxisa lehetséges a 'for' utasításnak:
[label:]FOR változó_név IN tömb DO utasítás_blokk [kivétel_kezelés] END [FOR];
[label:]FOR változó_név IN kezdő_érték TO vég_érték [BY lépésköz] DO utasítás_blokk [kivétel_kezelés] END [FOR];
[label:]FOR referencia_lista IN {CURSOR cursor_név [beállitások]| sql_select_utasítás} [BY lépésköz] DO utasítás_blokk [kivétel_kezelés] END [FOR];

Példa:

faktorialis : integer = 1; for i in 2 to 10 do faktorialis = faktorialis * i; end for;

Egy másik Forté-ben használatos ciklus a 'while', amely addig hajtja ismételten végre az utasításblokkot, amíg a kifejezés értéke igaz. A 'while' szintaxisa:

[label:]WHILE logikai_kifejezes DO utasítás_blokk [kivétel_kezelés] END [WHILE];

Példa:

i : integer = 1; while i

Mindkét ciklusban használhatóak a 'continue [cimke]' illetve az 'exit [címke]' utasítások. A 'continue' hatására megismétli az adott ciklus-t, amelyre a címke mutat. Ha nem rendelkezik cimkével, akkor azt a ciklust ismétli meg, amelyik az utasítást közvetlenül tartalmazza.
Az 'exit' hatására a program kilép az utasítást közvetlenül tartalmazó blokkból. Igy a ciklusokban szereplö 'exit' magából a ciklusból lép ki.

Event-ek

A Forté egy event-ek (szignálok) által kommunikáló nyelv. Ezeket a szignálokat két módon lehet lekezelni. Az egyik lehetőség az 'event loop', amely addig figyeli és kezeli le az event-eket, ameddig explicit kilépés nem történik a ciklusból. Az 'event loop' szintaxisa:
[label:]EVENT LOOP [IS] [PREREGISTER utasítás_lista] [[POSTREGISTER] utasítás_lista] [WHEN event_specifikáció DO utasítás_blokk]... [kivétel_kezelés] END [EVENT];

A másik lehetőség az event-ek kezelésére az 'event case', amely az elsőként érkező szignálra figyel, majd ennek lekezelése után automatikusan kilép az utasításból. Az 'even case' szintaxisa:

[label:]EVENT CASE [IS] [PREREGISTER utasítás_lista] [[POSTREGISTER] utasítás_lista] [WHEN event_specifikáció DO utasítás_blokk]... [kivétel_kezelés] END [EVENT];