CA - Visual Objects

Utasítások, vezérlési szerkezetek

Értékadás, üres utasítás

Értédásra már bőven láttunk példát, hasonlóan más nyelvekhez ez is az új értékkel tér vissza, így használható értékadás láncok képzésére.

local i := 2 as int local j := 3 as int i := j := 5 ? i, j // output: 5 5

Az általánosabb aritmetikai operátorokhoz létezik értékadással kevert változat is, például az a += b ugyanaz mint az a := a + b.
Az üres utasítás egyszerüen annyi, hogy nem írunk semmit.

Szekvencia

Már volt szó arról, hogy CA-VO -ban egy utasítássor vége a sorvégejel, a ; karakter itt a folytatássort jelenti. Ha több utasítást szeretnénk egy sorba írni, akkor szintén a ; operátort kell használni.

local i := 2 as int * ez nem szekvencia, hanem egy sorba írt elágazás if i = 2 ; ? "alma" ; endif

Elágazás

Elágazásokat az if - elseif - else - endif szerkezettel csinálhatunk, ebben a középső kettő opcionális. A csellengő else problémája a kötelező endif -el ki van küszöbölve. endif helyett állhat end is. Elágazások tetszőleges mélységig egymásba ágyazhatók.

local i := 2 as int if i > 1 if i > 2 ? "alma" end end if i > 2 ? "lol" elseif i > 1 ? "lil" else ? "lal" endif

A CA-VO lusta kiértékelést használ, tehát például ha egy .and. bal oldala hamis, akkor a jobb oldal már ki sem értékelődik. Ezt szemlélteti az alábbi program.

function test as logic ? "test" return true function Start(p) local i := 2 as int if i > 3 .and. test() ? "hihihaha" endif _Accept("") return nil

Az elágazás egy másik fajtája a do case - case - otherwise - end szerkezet. Itt más nyelvekkel ellentétben nem folyik át a vezérlés, ezért nem lehet breakelni (a break hatására amúgyis azonnal befejeződik a program). A végrehajtás az első olyan case -re ugrik, amely igazra értékelődött ki. Ha egyik sem igaz, akkor az otherwise -ra.

local i := 2 as int do case case i = 1 ? "lol" case i = 2 ? "lil" case i = 2 ? "lal" otherwise ? "lel" end // output: lil

Ciklus

CA-VO -ban is többféle ciklus létezik, a legegyszerűbb a for ciklus, ennek segítségével egy adott utasítássorozatot ismételgethetünk adott lépésszámig. A növelés irányát az upto és a downto utasítással adhatjuk meg, a növelés mértéket a step utasítással. Ha lusták vagyunk írhatunk to -t is, akkor viszont a step után írt kifejezés határozza meg az irányt. A következő program kiírja a 0 és 20 közötti páros számokat.

local i as int for i := 2 upto 20 step 2 ? i next

Ugyanez visszafelé, downto helyett sima to -val, és ezért -2 -vel kell növelni az értéket. Ha nem adjuk meg a step -et, akkor 1-el fog növelődni/csökkenni.

local i as int for i := 20 to 2 step -2 ? i next

Elöltesztelős ciklust a do - while - end szerkezettel lehet csinálni, amennyiben korábban ki akarunk lépni belőle azt az exit utasítással tehetjük meg. A ciklusfeltételhez való visszaugrást a loop utasítással lehet elérni. Ugyanezek működnek a for ciklussal is. Az alábbi program megint kiirja a páros számokat, viszont a loop utasítást használja a páratlan számok átugrására.

local i := 0 as int do while i < 20 // a do-t nem kötelező kiírni ++i if i % 2 > 0 loop endif ? i end

Ugyanez meghackelve hátultesztelős ciklussá (beépített nincs).

local i := 2 as int while true ? i i += 2 if i = 20 exit endif end

Vezérlésátadó utasítások

Itt most a függvényekről kéne valamit mondani, de nem teszem mert már láttunk rájuk példát és a következő fejezet amúgyis róluk szól. Tegyük fel, hogy van egy x(a, b) függvényünk, ezt kétféleképpen is meghívhatjuk. Az egyik módszer, hogy leírjuk a függvény nevét, majd zárójelben az argumentumokat. A másik módszer, azaz a do - with csak kompatibilitási okokból van a nyelvben, és nem kimondottan függvényekre van, hanem eljárásokra. Eljárást ugyanúgy definiálunk mint egy függvényt, viszont nem lehet visszatérő értéke.

function x(a as int, b as int) as void ? a, b procedure y(a as int, b as int) ? a + b function Start(p) x(4, 5) y(4, 5) do x with 2, 3 do y with 2, 3 _Accept("") return nil

Dijkstra fanok örülhetnek, mert goto és gosub nincsen.