A Corbascript nyelv

Beépített adattípusok, változók és kifejezések

Kifejezések

E fejezet témája a CorbaScript kifejezések szintaktikája. Ezek a szintaktikai konstrukciók általános érvényűek minden CorbaScript objektumra.

Szintaxis

CorbaScript kifejezés lehet literál, azonosító, zárójelezett-, aritmetikai-, relációs-, logikai kifejezés, eljárás hívás, attribútum hivatkozás, metódus hívás, tömb és könyvtár létrehozás illetve indexelt hivatkozás.

Literál értékek

<literal> ::= <long_literal> | <double_literal> | <character_literal> | <string_literal>

Azonosítók

A kifejezés-azonosítók megegyeznek az előző fejezetben leírt azonosítókkal. Minden nevesített CorbaScript objektumnak (konstans, változó, típus, eljárás, osztály, modul stb.) lehet ilyen azonosítója. Két előre definiált konstans azonosító van (true és false), amelyek a két logikai értékhez vannak rendelve. A Void az egyedi üres objektumot reprezentálja.

Aritmetikai operátorok

A "+","-","*","/" a megszokott, a "%" és a "\" a maradékos osztás maradék és egészrész tagjai.

Relációk

A klasszikus két operandusú relációs operátorok a "==","!=","<","<=",">",">=", visszatérési értékük egy logikai érték.

Logikai operátorok

A bináris negáció a "!", a bináris és a "&&" , a bináris vagy a "||" karakterekkel adható meg.

Eljárás hívás

Az eljáráshívás szintaktikája a következő:
Lásd az eljárásokról szóló résznél.

Változó és attribútum kezelés

Értékadás

Változó értékadására a klasszikus módon az "=" operátor használható. Változónak értékül adható bármilyen kifejezés. A változót az első értékadással definiálhatjuk. Futás idő alatt a változó több féle típusú értékkel rendelkezhet.
Például:

>>>> v=10
>>>>v
10
>>>>v="Hello"
"Hello"

Az attribútum hivatkozásokra a "." operátor, az index hivatkozásokra a "!" operátor használható.

A Del utasítás

A del utasítás segítségével egy adott azonosítóval megjelölt változót megszüntethetünk. Ezt az utasítást használhatjuk változókra és osztályattribútumokra is.

Objektumok és típusok

Objektum típusossága

Mivel a CorbaScript egy objektum-orientált script nyelv, minden entitás , úgymint literálok, tömbök, szótárak, eljárások, osztályok, példány változók, kivételek, modulok, belső objektumokkal vannak reprezentálva. Minden objektum működése leírható, operátorok, attribútumok és metódusok halmazával. Egy objektum viselkedését meghatározza a típusa. Ezen a típuson keresztül az interpreter ellenőrzi az operátorok, attribútumok, metódus hívások helyességét. Ha egy típusellenőrzési hiba lép fel, az interpreter egy kivételt generál. Ráadásul a típusok is önálló CorbaScript objektumok. A _type attribútum lehetőséget ad az objetumok típusának dinamikus lekérdezésére.

A következeő típusmanipulációs művelettek vannak:

object._type Az object objektum típusa
object._is_a(type) igazat (true) ad vissza, ha az object objektum típusa type, vagy a type egy altípusa
object._toString() egy objektum szöveges reprezentációja
type._type a type típus metatípusa
type._is_a(type2) igazat (true) ad vissza, ha a type típus egyenlő, vagy altípusa a type2 típusnak
type._toString() a type típus szöveges reprezentéciója

Elemi típusok

Az elemi típusok a boolean, long, double, char, amelyekre a klasszikus műveletek és opreátorok alkalmazhatók.

A String típus

A String típus számos attribútummal, metódussal, operátorral rendelkezik. Ezek a műveletek egymásba ágyazhatóak, de soha nem módosítják a cél stringet. Ha a string méreténél nagyobb elemre hivatkozunk, BadIndex kivétel váltódik ki.
A string típus műveleteit, attribútumait a kövekező táblázat szemlélteti:

s.length Visszaadja az s string hosszát
s[i] Visszaadja az i. pozición lévő karaktert. Az indexnek 0 és s.length-1 közé kell esnie.
c+s Összefűzi a c karaktert és az s stringet
s1+s2 Összefűzi az s1 és az s2 stringet
s1==s2 Igaz, ha s1 és s2 megegyezik
s1!=s2 Igaz, ha s1 és s2 nem egyezik meg
s1 igaz, ha s1 lexikografikusan kisebb, mint s2
s1<=s2 igaz, ha s1 lexikografikusan nem nagyobb, mint s2
s1>s2 igaz, ha s1 lexikografikusan nagyobb, mint s2
s1>=s2 igaz, ha s1 lexikografikusan nem kisebb, mint s2
s.index(c) c első előfordulásának indexét adja vissza. Ha s-ben nincs c, akkor -1
s.index(c,pos) c első előfordulásának indexét adja vissza, a pos. index után. Ha s-ben nincs c, akkor -1
s.index(s2) az s2 string első előfordulásának indexét adja vissza. Ha s-ben nincs s2, akkor -1
s.index(s2,pos) az s2 első előfordulásának indexét adja vissza, a pos. index után. Ha s-ben nincs s2, akkor -1
s.rindex(c) c utolsó előfordulásának indexét adja vissza. Ha s-ben nincs c, akkor -1
s.rindex(c,pos) c utolsó előfordulásának indexét adja vissza, a pos. index előtt. Ha s-ben nincs c, akkor -1
s.rindex(s2) az s2 string utolsó előfordulásának indexét adja vissza. Ha s-ben nincs s2, akkor -1
s.rindex(s2,pos) az s2 utolsó előfordulásának indexét adja vissza, a pos. index előtt. Ha s-ben nincs s2, akkor -1
s.substring(bi) az s string bi indextöl kezdődő részstringjét adja vissza
s.subtring(bi,ei) az s string bi és ei index közé eső részét adja vissza
s.toLowerCase() visszaadja az s string kisbetűs reprezentációját
s.toupperCase() visszaadja az s string nagybetűs reprezentációját

A tömb típus

A tömb egy dinamikusan növelhető konténer típus. Tömböt létrehozni a "[]" operátorokkal lehet, az elemeket a "," operátorral határolhatjuk el egymástól. A tömb elemei lehetnek külömböző típusúak, akár tömbök is. Ha a tömb méreténél nagyobb elemre hivatkozunk, BadIndex kivétel váltódik ki.
A tömb típus műveleteit, attribútumait a kövekező táblázat szemlélteti:

a.length Visszaadja az a tömb hosszát
s[i] Visszaadja az i. pozición lévő elemet. Az indexnek 0 és s.length-1 közé kell esnie.
a[i]=v a tömb i. elemét v-re cseréli
a1+a2 Összefűzi az a1 és az a2 tömböket
a.append(v) a v elemet az a tömb végéhez adja
a.insert(v,i) a v elemet beszúrja az a tömb i. pozíciójára
a.delete(i) kitörli a tömb i. pozicióján lévő elemet
a.remove(v) kitörli a v első előfordulását
a.contains(v) igaz, ha az a tömb tartalmazza a v elemet
a.index(v) v első előfordulásának indexét adja vissza. Ha a-ban nincs c, akkor -1
a.index(v,pos) v első előfordulásának indexét adja vissza, a pos. index után. Ha a-ban nincs v, akkor -1
a.rindex(v) v utolsó előfordulásának indexét adja vissza. Ha a-ban nincs v, akkor -1
a.rindex(v,pos) v utolsó előfordulásának indexét adja vissza, a pos. index előtt. Ha a-ban nincs v, akkor -1
array.create(n) létrehoz egy n hosszú, Void elemekkel feltöltött tömböt

A szótár típus

A szótár típus egy olyan konténerosztály, amelyben tetszőleges kulcs-elem párokat hatékonyan tárolhatunk. A kulcsok és elemek tetszőleges CorbaScript objektumok lehetnek. Szótárat létrehozni a "{}" operátorokkal lehet, kulcs-elem párokat a ",", a kulcsokat az elemektől a ":" határolójel segítségével választhatjuk el.
Ha olyan kulcsra hivatkozunk, amely nincs a szótárban, NotFound kivétel váltódik ki.
Például:

>>> d = { 1:"egy",2:"kettő",3:"három"}

A dictionary típus műveleteit és attribútumait a kövekező táblázat szemlélteti:

dict.size Visszaadja az szótárban lévő elemek számát
dict.keys Visszaadja az szótárban lévő kulcsokat
dict.values Visszaadja az szótárban lévő elemeket
dict[key] Visszaadja az szótárban lévő key kulcsú elemet
dict[key]=value a value elemet behelyezi a key kulccsal a szótárba
dict.contains(value) igaz, ha a szótár tartalmazza a value elemet
dict.containsKey(key) igaz, ha a szótár tartalmazza a key kulcsot
dict.remove(key) a key kulcsú elemet törli a szótárból