A InfoWiki wikiből
Tartalomjegyzék |
Típusrendszer
A TITAN-M típusrendszere tartalmaz valahány alaptípust, mely nyelvi szinten támogatott. Ezekből képezhetünk típus-konstruktorok segítségével rekord, touple, tömb, lista típusokat (saját típusok), illetve lehetőség van rá hogy currying segítségével függvény-típusokat is megadhassunk.
Alap típusrendszer
- egész típusok (alapvetően a .NET nyelvi egész típusa)
- byte, sbyte, short, ushort, int, uint, long, ulong
- longInt mint speciális, tetszőlegesen sok számjegyet kezelő egész szám típus
- valós típusok (alapvetően a .NET nyelvi valós típusa)
- float, double
- longDouble, mint speciális, tetszőleges pontosságú, tetszőlegesen sok számjegyet kezelő valós szám típus
- karakter (char)
- szöveg (string)
- logikai (bool)
- dátum (date)
- idő (time)
- dátum és idő egyben (datetime)
Saját típusok
- rekord típus létrehozása a record kulcsszóval (az indentálás a nyelvi szintaktikai része!):
record ember fizetes int eletkor int testhomerseklet float
- touple típus létrehozása zárójelezéssel (ebben a példában mint függvény visszatérési típus):
func fileba_iras:File Int -> (Int,Bool)
- lista létrehozása szögletes zárójelezéssel (listát vár paraméterként, és listát ad vissza):
func primek:[int] -> [int]
Függvények típusai
A függvények paramétereinek típusát megadhatjuk (statikus típusrendszer). Amennyiben nem adjuk meg, úgy a függvényhívások során automatikus típuslevezetés lesz alkalmazva, és az aktuális paraméterek típusai, valamint a függvény (meg nem adott) típusai közötti egyeztethetőség fordítási időben lesz ellenőrízve.
Egyszerű típusmegadás: a függvény argumentumainak típusai a kódban explicit módon meg lettek adva:
func:sinus double -> double sinus rad = net.call { result = Math.Sin( rad ) } func:sinusL longDouble -> longDouble sinusL rad = net.call { result = ExtendMath.Sin( rad ) }
Amennyiben a függvénynél argumentum-típusok nem kerültek megadásra, úgy a paraméterekhez a fordító típus-sejtéseket fűz, és a konkrét függvény hívások esetén a konkrét típusok ismeretében olyan egyezéseket keres, ahol a sejtés illeszthető a típusokra:
cosinus rad = net.call { result = Math.Cos( rad ) }
A fenti esetben pl. sejthető, hogy a rad típusa double lesz, csakúgy mint a függvény visszatérési típusa is.