É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.