A Lingo programozási nyelv

Típusok, típuskonstrukciók

Típusszerkezet

A Lingot a fentiek figyelembevételével gyengén típusos nyelvnek tekinthetjük, mivel a kifejezések konzisztenciája csak futásidőben dönthető el.

Elemi típusok

A Lingo az alábbi típusokat kezeli:

A logikai értékeket a TRUE és a FALSE konstansok reprezentálják, érvényes a TRUE = 1 és FALSE = 0 egyenlőség. A szimbólum (symbol) adattípus segítségével a programozó saját értékeket definiálhat és ezeket adhatja értékül pl. változóknak. A szimbólumokat a # (hash) karakter vezeti be:

set állapot = #működik

A szimbólumok megadásánál az azonosítók névadási szabályai mérvadók, tehát betűvel kezdődnek és betűvel vagy számjeggyel folytatódhatnak. Hosszuk nem limitált, és az angol abc kis- és nagybetűi, illetve az ezekből mellékjelekkel és ékezetekkel képzett karakterek tekinthetők betűnek. A szimbólumok nem tartalmazhatnak szóközt és pontot, és a kis- és ngybetűk nincsenek megkülönböztetve. A szimbólumok a memóriában a sztringeknél kevesebb helyet foglalnak, azonban nem lehet őket karakterenként feldolgozni. Létezik azonban konverzió a szimbólumok és a sztringek között, ha erre lenne szükség.

A lista adattípus kétféle: lineáris és tulajdonság-lista lehet. A lineáris lista (linear list) értékeket tartalmazhat, melyeket megadáskor vesszővel választunk el, az értékeket szögletes zárójelek közé zárjuk. Ha az elemek sztringek, azokat idézőjelek közé kell írnunk:

set x = [1, 2, 3]
set y = ["alma", "körte", "dió"]
set w = [1, 2, "három"]
set v = [1, 2, [3, 4], 5]

Mint látható, a listaelemek típusa akár különböző is lehet, illetve listaelem lehet egy másik lista is.

A tulajdonság-lista (property list) minden eleme egy értékből és egy hozzá tartozó tulajdonságból áll, a tulajdonság megelőzi az értéket és egy kettőspont választja el attól. Megadása a következő módon történik:

set z = [#asztal:5, #szék:3, #lámpa:2]

A listák törölhetők:

set x = [] -- lineáris lista törlése
set z = [:] -- tulajdonság-lista törlése

A listák sorba rendezhetők, lineáris listát az értékek alapján, míg tulajdonságlistát a tulajdonságok alapján rendezhetünk. A listák bővíthetők új elemekkel, mint objektumok, ismerik a saját elemszámukat, törölhetők belőlük elemek, megkereshető egy elemük sorszáma, stb. Más nyelvekkel összehasonlítva a Lingo list adattípusa ötvözi a tömbök, mint statikus és a listák, mint dinamikus adatszerkezetek lehetőségeit.

Típuskonstrukciók

Típuskonverziók

A Lingoban a típuskonverziót eseménykezelők (~ függvények) valósítják meg. Egészet lebegőpontos számmá a float(), lebegőpontost egésszé az integer() (ez a kerekítés matematikai szabályait figyelembe véve működik), bármilyen nem sztringet sztringgé a string(), sztringet szimbólummá a symbol(), míg sztringet számmá a value() függvény konvertál.

Változók, konstansok

Hatókör

A Lingo – más nyelvekkel ellentétben – nem definiálja a hatókör fogalmát. Ha egy objektum ismeri egy másik obejtum metódusainak nevét, akkor azokat közvetlenül meg tudja hívni bármely esetben.

A Lingoban deklarált változók alapértelmezés szerint lokálisak arra a szkriptre illetve eseménykezelőre, melyben deklaráljuk őket. Lehetőségünk van globális változók deklarásálásra, melyek a global kulcsszóval tehetünk meg:

global gVáltozó1, gVáltozó2

Figyeljük meg, hogy ez valójában nem hasonlít a szokásos változó-deklarációra, mivel csak az azonosítókat soroljuk fel, típust, esetleg kezdőértéke nem. A Lingoban egy változó az első értékadástól érvényes.

Ha egy változót globálisként szeretnénk használni, akkor annak a változónak a nevét minden olyan szkriptben fel kell sorolni a global után, amelyben használni szeretnénk. Ha ezt nem tesszük meg, akkor az adott változó az adott szkript lokálisa lesz, bármennyire is globálisnak jelöltük egy másik szkriptben.

A Lingo érdekessége, hogy bármely változó típusa – beleértve a globálisokat is – futás alatt megváltozhat és megváltoztatható. Ez többek között azért valósítható meg, mert a Lingo minden típushoz azonos méretű memóriát foglal, az alábbiak szerint:

A változó címe a láthatósága alatt mindvégig változatlan marad. Ha egy változó eredeti típusa elemi volt, az új típusa összetett lett, akkor az eddigi területhez hozzákapcsolódik a szükséges további terület. Ha az eredeti típus összetett volt, az új típus elemi lett, akkor egyszerűen törlődik a kiegészítő rész. A változók területe a láthatóság alatt nem szabadul fel, ha a változó értéke nem definiált, akkor is nyolc bájtot foglal le, mert a void érték is nyolc bájton van ábrázolva.

Élettartam

A Lingoban háromféle élettartam definiált.

Kifejezések, operátorok