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.
alap_tipus: byte | char | int | long | float | double | boolean | pointer | selectorAz alaptípusokat a következőképpen csoportosíthatjuk:
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
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.
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 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.
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.
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.
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ó.
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.
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ó
akkor a
Foo
lesz. De ha ebből a Foo
-ból származtatunk
egy Bar
osztályt, akkor aBar
lesz.
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: