A minta fogalma
Más nyelvektől eltérően a BETA-ban az alapegység nem a kódblokk vagy az adatrekord, hanem a minta (pattern). A minta felépítése:
minta_neve : szuperminta_neve
(#
<deklarációk listája>
enter
<paraméterek listája>
do
<akciók>
exit
<eredmények listája>
#)
A név a minta azonosítására szolgál. Mintaöröklődés esetén megajuk a minta ősmintáját (szupermintáját). A (# és #) zárójel-pár által határolt részt objektum-deszkriptornak nevezzük. Ezen belül a deklarációs részben adhatjuk meg a minta belső változóit, vagy belső mintáit; az egyes deklarációkat pontosvesszővel választjuk el egymástól, az azonos típusú változókat összevonva is deklarálhatjuk (vesszőkkel tagolva). Az enter rész tartalmazza a bejövő paramétereket zárójelben, vesszőkkel felsorolva; ha csak egy bejövő paraméterünk van, a zárójel elhagyható. A do részben írhatjuk le a minta által elvégzett műveleteket. Az exit részben sorolhatjuk fel a visszatérési értékeket az enter részhez hasonlóan. A minta szinte bármely része elhagyható; legális - bár nem túl hasznos - minta a következő: my_pattern : (# #);
Az imént már említettük, de hangsúlyozandó: a minták egymásba ágyazhatóak.
Az alapján osztályozhatjuk a mintákat, hogy a fentiek közül mely részeket tartjuk meg, illetve hagyjuk el:
-
Konstans deklarálása: csak a konstans nevét adjuk meg, és az exit részbe írjuk a konstans értékét.
pi: @ (# exit 3.14 #);
-
Függvény: A függvénynek nincsenek mellékhatásai - a függvény belső változóin kívül nem változik meg semmilyen más objektum állapota. A visszatérési érték(ek) csak a bejövő paraméterektől függenek. Függvény deklarálására és hívása:
c: @integer;
add:
(# a, b, result: @integer;
enter (a,b)
do a+b->result;
exit result
#);
do
(7,9)->add->c;
-
Eljárás: ha egy függvényszerű minta exit részét elhagyjuk, egy eljárást kapunk. Az eljárásnak természetesen lehetnek mellékhatásai is.
-
Osztály: A deklarációs részben felsoroljuk az osztály adattagjait, valamint itt deklarálhatjuk - belső mintaként - az osztály tagfüggvényeit. A konstruktor szerepét a do rész játszhatja, az adattagok inicializálásához az enter részben felsorolt bejövő paramétereket használhatjuk. Az exit részt elhagyhatjuk.
-
Rekord: Ha egy mintában csak a deklarációs részt tartjuk meg, és ott nem szerepelnek újabb mintadeklarációk, akkor a rekord típusnak megfelelő konstrukciót kapunk. Ha az enter, illetve exit részben felsoroljuk a deklarált adattagokat, akkor egyszerre feltölthetjük az adattagokat, illetve értékül adhatjuk a rekord típusú változónkat.
Lehetőség van egyedi minta létrehozására, ha nincs szükség egy osztályra, a következő módon:
my_object: @super_pattern (# ... #);
Ilyenkor csak egy ilyen mintájú változó fog létrejönni, méghozzá a @ jel miatt, így a "my_object" nem mintanév, hanem változónév.
A nyelv alapmintái
A nyelv alapmintái: Integer, Boolean, Char és Real.
Ezek predefinit minták.
A Mjølner BETA Systemben van néhány megszorítás az alapminták használatára:
- Nem lehet dinamikus referenciát deklarálni az alapminták példányaira.
- Az alapmintákat nem lehet szuper-mintának használni.
A BETA egy nagyon általános nyelv, ez megnehezítheti a hatékony implementáció létrehozását. A fenti megszorításokat hatékonysági okok miatt vezették be, nincs logikai motivációjuk.
További predefinit minta (de nem alapminta) a shortInt és a text.
Alaposztály
Object: Ez olyan osztály, amelyből minden más osztály származtatható. Általában nem kell kiírni, automatikusan öröklődik.
Kontroll-struktúrák
Ezek olyan eljárásminták, amelyeket hagyományos értelemben utasításokként definiálnak. Ilyen például az
if,
for stb. (
Vezérlési szerkezetek )