A CLU programozási nyelv

Változók és kifejezések



3. Alapvető vezérlési szerkezetek

3.1 Szekvencia
3.2. Blokk
3.3 Elágazás
3.4. Elöltesztelő ciklus
3.5. Iteráció
3.6. Case szerkezet
3.7. Ugró utasítások


3.1 Szekvencia

Nem szükséges, hogy az utasításokat termináljuk vagy elválasszuk egymástól, a pontosvessző használata megengedett, de nem kötelező.

A megjegyzést % jel kezdi, és a sor végéig tart.

3.2. Blokk

Összetett utasítást képezhetünk a begin és az end utasítások segítségével. Ezt a lehetőséget azonban csak ritkán használják ki a programozók, mivel a fenti programkonstrukciók már automatikusan biztosítják az új blokkot, ahol újabb deklarációk is elhelyezhetők.

A blokkban bárhol szerepelhet változódeklaráció, annak láthatósága a blokk fennmaradó részéig tart, élettartama a blokkal együtt befejeződik. (A deklarációnak tehát nem kötelező a blokk elején lennie.)

begin
   <body>
end

3.3 Elágazás

Többágú elágazást használhatunk az if...then...elseif...else utasítással. Az elágazás ágai blokknak számítanak.

if <expression> then <body> else <body> end

3.4. Elöltesztelő ciklus

A megszokott while utasítás bekerült a nyelvbe:

while <condition> do <body> end
continue, break
Hagyományos elöltesztelő ciklus. A ciklus magja blokknak számít. Continue hatására a ciklusmag befejeződik és a következő ciklussal folytatódik a vezérlés, a break hatására a ciklus befejeződik. Ezek az utasítások mindig a legbelső ciklusra vonatkoznak.

3.5. Iteráció

A CLU-ban definiálták az iteráció rutint, mely formailag teljesen megegyezik a függvényekkel, csak return          kulcsszó helyett a yield kulcsszót használja. (A típusleírásban, és a törzsben is.) A vezérlés is hasonló, csakhogy az iteráció nem fejezi be a futását a yield utasításnál, hanem várakozik, hogy újra megkapja a vezélést, és végrehajtsa a legutóbbi yield-et követő utasításokat. Az iteráció minden yield utasításnál visszad egy (vagy több) értéket. Az iteráció egy return utasításnál vagy az iteráció végén ér véget.

Iterációt a for ciklussal tudunk hívni. (A for ciklus csak iterátorral használható. Iterátorokat az egyes típusokhoz szokás készíteni)

for (<i1 vált/dekl> ,<i2 vált/dekl>,...) in <iterációhívás> do  <body>  end
continue, break
Az iteráció az eljáráshoz hasonlóan adhat vissza többszörös értéket, ezekkel meg kell egyezniük a          ciklusváltozóknak (darabra és típusra). A ciklusváltozók lehetnek már definiált változók, de deklaráció is          szerepelhet a for utáni felsorolásban, ekkor a ciklus bokkjában lokális változók lesznek. Az iteráció minden egyes visszadott értékére lefut a ciklusmag, ha az iteráció befejeződik, akkor a ciklus is befejeződik. Ha a ciklust megszakítja egy break utasítás, akkor az iteráció is véget ér.

3.6. Case szerkezet

A megszokott értelemben vett Case szerkezet nincs a nyelvben.

Valamelyest hasonló jellegű a tagcase szerkezet, ami a cimkézett unió típusokhoz tartozik - egyéb célra nem használható.

3.7. Ugró utasítások

return (...)
Az eljárástörzs bármely pontjáról visszatérhetünk a hívóhoz az utasítás segítségével a visszatérési értékeknek megfelelő kifejezésértékekkel. Ezt az utasítást mindenképpen használni kell, ha van visszatérési értéke az eljárásnak, egyébként opcionális a használata.
continue
Az utasítás befejezi a kurrens ciklus aktuális iterációját (ciklusmagját), és a vezérlés a ciklus következő iterációjával folytatódik.
break
Az utasítás terminálja a kurrens ciklust, és a vezérlés a közvetlenül a befejezett ciklus után álló utasítással folytatódik.
goto
A CLU-ban nincs (!!!) goto utasítás, mert az nem lenne elég biztonságos.