A TOM programozási nyelv

Típusok

Típusok

A TOM háromféle változótípust kezel: alaptípusok, tuple típusok és objektum típusok. Továbbá még vannak speciális típusok is, mint pl. a void, a dynamic, és az id. A változók típusa lehet valamely alap- tuple- és objektum típus. Az argumentumok típusa lehet minden, ami egy változó típusa lehet, továbbá lehet dynamic. Metódusok visszatérési típusa lehet minden, ami egy argumentum típusa lehet, és lehet void, ami pedig azt jelenti, hogy nincs visszatérési értéke.

Alaptípusok

alap_tipus: byte | char | int | long | float | double | boolean | pointer | selector
Az alaptípusokat a következőképpen csoportosíthatjuk:

Skalár típusok

A TOM-ban kétféle skalár típust különböztetünk meg: egész és lebegőpontos típusokat.

Az egész skalár típusok:

byte – előjel nélküli 8 bites egész
char – előjel nélküli 16 bites egész
int – előjeles 32 bites egész
long – előjeles 64 bites egész

A lebegőpontos skalár típusok:

float – lebegőpontos szám
double – dupla pontos lebegőpontos szám

Ahol numerikus típust kell használnunk, ott a megadottnál szűkebb numerikus típusú változó is használható. Így ha char-t kellene használnunk, akkor a byte is elfogadható vagy egy int használható long helyett.

A skalár típusú változók alapértéke zérus.

Boolean típus

A boolean típust az igazság érték meghatározására használhatjuk. Értékei TRUE ill, FALSE lehetnek. Ezekkel egyenértékű a YES és a NO.
Az alapértelmezett logikai konstansok (instance tom.All-ban definiálva):

const TRUE = !0;
const FALSE = !1;
const YES = TRUE;
const NO = FALSE;

A boolean típusnak false az alapértelmezett értéke.

Mutató típus

A mutató típus egy absztrakt típus. Nincs rajta semmilyen művelet sem értelmezve, csak értékül lehet adni őket egymásnak. Elsősorban tömbök megvalósítására és idegen nyelvek forráskódjainak fogadására használható.

A mutató típus alapértelmezett értéke az érvénytelen pointer (C-ben a NULL). Figyelembe kell venni, hogy a TOM-ban nem lehet a konstans null pointerre hivatkozás.

Selector típus

A selector egy nevet és egy típusinformációt tartalmaz. Tulajdonképpen a selector a meghívott objektum valamely tulajdonságának a meghívása és az üzenet neve. Az üzenet második része tartalmazza az argumentumokat a meghívott metódushoz. Az egyetlen művelet, ami a selector típuson értelmezve van, az összehasonlító egyenlőség.

Az alapértelmezett selector érték a nemlétező selectort jelöli.

Void típus

Speciális típus, érték hiányát jelzi. Akkor használjuk, ha egy metódus nem ad vissza értéket, ekkor ez a visszatérési típusa. Másik fontos használata, ha egy kifejezésben nem kell értéket megadni (üres utasítás).

Nem lehet rajta semmilyen műveletet sem végrehajtani, nincs alapértelmezett értéke.

Dynamic típus

Egy, a TOM nyelven kívül definiált (pl. C) metódusnak lehet dinamikus visszatérési értéke és dinamikus argumentumai. Egy dynamic típus minden lehet, ami átadható és ami fogadható.

Object típus

A TOM-ban az egyetlen típuskonstrukciós lehetőség az object típus. Segítségével tudunk struktúrákat, osztályokat példányokat (objektumokat) létrehozni. Minden objektumnak, – osztálynak és példánynak – ugyanaz a típusa, a compiler nem tud különbséget tenni két objektum típus között. Egy object típusú változó gyakorlatilag csak egy mutató egy, a heap-ben lévő objektumra.
Alapértelmezett értéke a hibás referencia, a nil.

Id típus

Ez gyakorlatilag nem egy valódi típus. Az „id” gyakorlatilag a változó deklarációját tartalmazó osztály típusát jelenti. Tehát például ha van egy Foo osztályunk, amiben szerepel az alábbi deklaráció

id self;

akkor a

{ Foo a; [a self]; }

kifejezés típusa Foo lesz. De ha ebből a Foo-ból származtatunk egy Bar osztályt, akkor a

{ Bar a; [a self]; }

kifejezés típusa itt már Bar lesz.

Tuple típus

Ez a típus gyakorlatilag a rekord típus-konstrukciót helyettesíti. Nem egy valódi típus, tehát nem lehet „tuple” típusú változókat létrehozni. Pl. (123, 4.1415) egy tuple típusú konstans, egy (int, float) típus. Tehát az egyes mezők típusának neveit vesszővel elválasztva, zárójelbe téve kapunk tuple típust. Ugyanígy adhatunk meg konstansokat is. A tuple típusok alapértelmezett értéke a megfelelő típusok alapértékeinek direktszorzata.
Leggyakrabban eljárások paraméterátadásánál használjuk. Például a két integer bemenő és két integer kimenő paraméterrel dolgozó maradékos osztás eljárást így lehet deklarálnil:

(int, int) divmod (int, int) (a, b);

Egy másik gyakran használt eset, a szimultán értékadás. Ennek segítségével akár két változó értékét is könnyen megcserélhetjük.

int a, b; (a, b) = (b, a);