A Lingo programozási nyelv

Alprogramok, modulok

Szintaxis

A Lingo-terminológia az alprogramokat eseménykezelőnek (handler) nevezi. Az alprogramokat szkriptekben tudjuk megadni, lehetőségünk van mind eljárások, mind függvények megadására.

Az alprogramok (eseménykezelők) megadása a következő módon történik:

on eseménykezelő [] [return ] end

Amennyiben az alprogram törzsében szerepel a return utasítás, az alprogram függvényként viselkedik. Amennyiben nem szerepel, az alprogram eljárásnak tekinthető.

Paraméterátadás

Az eseménykezelő fejrészében, a szignatúra részeként megadható argumentumlista. Ekkor az alprogram paraméterekkel hívható. A formális és aktuális paraméterlistában a paraméterek számának nem kell megegyeznie:

on hívóAlprogram hívottAlprogram(1, 2, 3) end on hívottAlprogram a, b, c, d put a put b put c put d end

A hívottAlprogram-ban a d változó lokális név lesz, és mivel nem kap értéket, kiíráskor értéke void lesz.

on hívóAlprogram hívottAlprogram(1,2,3) end on hívottAlprogram a, b put a put b end

Az aktuális paraméterlistában több argumentum van, mint a formálisban. Ekkor a hívottAlprogram-ban az a értéke 1 lesz, a b értéke 2, az aktuális paraméterlista harmadik argumentuma, a 3 ebben a példában figyelmen kívül marad.

Lehetőségünk van olyan alprogramokat is készíteni, melyben nem adunk meg formális paraméterlistát, hanem minden híváskor kiértékeljük azok számát. Ehhez a param() és a paramCount függvényeket kell használnunk:

on összegez szum = 0 repeat with aktParamSorszám = 1 to the paramCount szum = szum + param(aktParamSorszám) end repeat return szum end összegez(1, 2) -- 3 összegez(10, 20, 30, 40, 50) -- 150

A paraméterátadás mindig érték szerinti. Abban az esetben, ha egy szkriptben ugyanazt az azonosítót kapja egy globális változó és egy paraméter a formális paraméterlistában, akkor az azonosítóhoz rendelt érték a globális változó értéke lesz.

Túlterhelés

Rekurzió

A Lingo nem tiltja a rekurziót. Az alprogramokat a Lingo terminológiája eseménykezelőknek (handler) nevezik, az eseménykezelőket szkriptekben tudjuk megadni az alábbi módon:

on eseménykezelő [ [,]] end

Az eseménykezelők hívásakor azok nevét kell csak megadnunk. Rekurzív hívás tehát a következő módon történhet:

on faktoriális n if n = 0 then return 1 else return n * faktoriális(n - 1) end if