A Lingo programozási nyelv

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

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

Az értékadás szintaxisa:

[set] =
Ha egy objektum (pl. egy sprite) valamely tulajdonságát kívánjuk megadni, akkor az a következő módokon történhet: dot syntax:
sprite(12).forecolor = 100
verbose syntax:
set foreColor of sprite 12 to 100
A többszörös értékadás nem értelmezett. Érdekesség, hogy a Lingoban a változó típusa futás közben változhat, így megengedett a következő értékadás-sorozat:
set x = 12.5
set x = x + 10
.
.
set x = "Hétfő"
set x = x & " Kedd"

Szekvencia

A Lingonak nincs rá külön eszköze.

Elágazás

Kétirányú elágazás

Az utasítás szintaxisa:

if then


[else

]
end if
Az if…then…else működése a szokásos módon történik. Az if után logikai kifejezésnek kell állnia, annak igaz (TRUE) volta esetén a then utáni rész hajtódik végre, hamis (FALSE) volta esetén az else utáni rész kap vezérlést. Ha nincs else ág, akkor az end if utáni következő utasításon folytatódik a végrehajtás.

A Lingoban nincs rövidzár-kiértékelés, vagyis mindig kiértékelődik a teljes kifejezés.

A Lingo alkotói gondoltak a csellengő-else problémájára: az else utasítás definíció szerint midig az őt megelőző utolsó if-hez tartozik. Ennélfogva – egymásba ágyazott if-ek használatakor – időnként szükség lehet az else nothing utasítás használatára, amely explicit módon jelenti az üres else ágat.

Többirányú elágazás

Szintaxisa az alábbi:

case of
<érték1> :
<érték2> :


<érték3>, <érték4> :
[otherwise: ]
end case
A típusa bármi lehet: egész, valós és sztring is. A Lingo megkeresi az első olyan értéket, amely megegyezik a kifejezés értékével (sztringek esetén nem case-sensitive módban, azaz a kis- és nagybetűk nincsenek megkülönböztetve), és ha talál ilyet, akkor végrehajtja az utána írt utasítás(oka)t. Ezzel a case utasítás végrehajtása véget ért, további értékek keresése már nem történik meg, azaz a Lingo csak azokat az utasításokat hajtja végre, amelyek az első, a kifejezéssel megegyező értékhez tartoztak.

Ha egyetlen érték sem egyezik meg a értékével, akkor abban az esetben, ha adtunk meg otherwise ágat, az abban írott utasítások hajtódnak végre. Ha nincs otherwise ág, a vezérlést az end case utáni utasítás kapja meg. Ha adunk meg otherwise ágat, akkor annak az utasítás utolsó ágának kell lennie.

Ciklus

Feltételes ciklus

A Lingo egyféle feltételes ciklust ismer, az előtesztelő repeat…while ciklusutasítást.

repeat while

[exit repeat]
end repeat
A ciklus mindaddig ismétli a ciklusmagként megadott utasításokat, míg a ciklus fejében megadott kifejezés igaz értékű. A ciklus futása véget ér, ha a feltétel hamissá válik, illetve ha a ciklus magjában a vezérlés az exit repeat utasításra kerül. Ez esetekben a végrehajtás az end repeat utáni utasításon folytatódik.

Ha a logikai kifejezés az első lefutás előtt hamis, a ciklus üres ciklus lesz, vagyis a mag egyszer sem fut le. Ha a feltétel sosem válik hamissá, a ciklus végtelen ciklus lesz.

Ismert lépésszámú ciklus

Szintaxisa:

repeat with = <érték1> to <érték2>

[exit repeat]
end repeat
illetve
repeat with = <érték1> down to <érték2>

[exit repeat]
end repeat
Az első szintaxis használatos abban az esetben, ha <érték1> ≤ <érték2>, a második pedig akkor, ha <érték1> ≥ <érték2>. Ha nem eszerint járunk el, a ciklus üres ciklus lesz. Az exit repeat utasítás mindkét változatban használható.

Kezdő- és végértékként egész és valós számok adhatók meg, lépésköz megadása nem lehetséges, az minden esetben ±1 lesz, a ciklus irányától függően. Valós kezdőérték esetén a ciklusváltozó valós értékeket vesz fel. Fontos tudni, hogy a lefutás után a ciklusváltozó értéke az első esetben <érték2> + 1, míg a második esetben <érték2> - 1 lesz, ami felfogható a Lingo egyik hibájaként is, ha pl. azt – az egyébként nem túl valószínű – ciklust írjuk fel, amely az egész számok felső korlátjáig, 2 147 483 647-ig fut, akkor a ciklus nem áll meg ennél a végértéknél, hanem a ciklusváltozó felveszi az efölötti értékeket is (amelyek egyébként a dokumentáció szerint nemlétező értékek), és a ciklus végtelenné válik.

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

Feltétel nélküli vezérlésátadás

A Lingo-ban nem definiált a goto utasítás, legalábbis ami a szkripteken belüli feltétel nélküli vezérlésátadást illeti. Használhatók azonban a go to, illetve ahhoz hasonló utasítások a score-ban a lejátszófej mozgatásához, és bizonyos értelemben ez is felfogható egyfajta feltétel nélküli vezérlésátadásnak, hiszen pl. a score-ban elhelyezett frame-scriptek így (is) kaphatnak vezérlést.

Szkriptekben írott eseménykezelőkben – melyek visszatérési értéket is adnak (~ függvények) – a visszatérési értéket a return utasítás után adhatjuk meg. Fontos tudni, hogy a return után nem fejeződik be az eseménykezelő futása, az csak az end utasításnál történik meg.

Ciklus utasításokban használható az exit repeat utasítás, amely befejezteti a ciklus lefutását és a ciklus vége utáni első utasításnak adja át a vezérlést.