X + + adattípusok primitív és összetett adattípusok csoportjára oszthatóak.
A programozó létrehozhat kiterjesztett adattípusokat, például az enum alaptípusra építve, vagy más primitív adattípusokat felhasználva, arra definiálva a saját típust.
Minden konstansnak és változónak rendelkeznie kell típussal.
Minden változónak és konstansnak definiáltnak kell lennie az első használat előtt.
Metódus törzsében változó nem deklarálható. Az ilyen jellegű hiba, fordítási időben kiderül.
A változókat a metódus deklarációs részében, közvetlenül a metódusnév után, de még a metódustörzs előtt kell definiálni.
Pontosvessző választja el a metódus törzsét a deklarációs résztől, melyet mindíg új sorban kell elhelyezni.
X++ -ban osztály szintű tagváltozó is deklarálható, ekkor azonban az
osztály classdeclaration alapértelmezett szekciójába kell elhelyezni a
változó deklarációkat. Ebbe a kitüntetett részbe utasítás, értékadó
utasítás, illetve egyéb nyelvi elem nem helyezhető el.Az itt
deklarált változók az osztályon belüli metódusokból elérhetőek, azonban
kívülről nem látszanak, alapértelmezetten private hatókörrel bírnak,
melyet megváltoztatni nem lehet.
Anytype: Minden adattípussal használható, az összes elemi adattípus őse. Hasonló a C# object típusához. Mielőtt az anytype típusú változót használnánk, értéket kell adni neki. Az első értékadás meghatározza az anytype változó tényleges típusát, azaz értékadást követően típust változtatni nem lehetséges. Az értékadáskor a konverzió automatikus.
Boolean: Logikai igaz, vagy hamis értékeket tartalmaz. Helyettesíthető a beépített felsorolt típussal: NoYes:No, NoYes:Yes, valamint az integer típussal. Az integer típussal való helyettesítéskor a típuskonverzió automatikusan végrehajtásra kerül. Egy byte-on tárolja a rendszer ezt a típust. Egész értékkel való megfeleltetés, mint C++ -ban. (0: False, 1: True)
Date: dőpontokat tartalmaz, nap, hónap és év részekkel. Ez a típus az időt nem tartalmazza! Literálként is leírható, azaz:
Enum: Felsorolt adattípus. Számos beépített rendszerbeli felsorolt típus létezik. Az X++ nem támogatja a konstansok használatát, helyettük az enum-ot javasolja. A belső reprezentáció az egész típus, de használata literálok listájaként lehetséges. Definiáláskor lehetséges a literál név mögött elhelyezkedő egész érték beállítása. A kezdőérték 0-tól indul, de nem a kötelező legkisebb érték a nulla. Lehet más intervallumot is definiálni a 0 - 250 -es egész számok tartományában. Kifejezésekben használható a felsorolt típus sorszámának megfelelő egész értéke is. Például: SalesType::Order = 0, SalesType::BackOrder = 1. Automatukus konverzió történik boolean, integer, real típussal történő hasonlításkor, illetve értékadáskor. Explicit típuskonverzió megadása nem szükséges, de nem okoz hibát.
GUID: A globálisan egyedi azonosító. X + +-ban a GUID típusnak felel meg. 32 digiten hexadecimális számjegyekbő áll. 36, vagy 38 hosszúságú. 8-4-4-4-12 elrendezésben szerepel, string reprezentációban. Guid típus konverziója explicit történik, azaz nem automatikus. A konverziós függvények használata értékadáskor, vagy kifejezések használatában kötelező! Példa a konverzióra:
Integer típusok: egész értékek tárolása
Kétféle reprezentációban van jelen a nyelvben:
32 bites egész (alapértelmezés, nem kell jelölni hogy Int32)
64 bites egész (külön jelölni kell, azaz Int64)
32 bites egész értelmezési tartománya: [-2,147,483,647 ; 2,147,483,647].
64 btes egész értelmezési tartománya: [-9,223,372,036,854,775,808 ;
9,223,372,036,854,775,808]
Integer literál mindenhol használható, ahol integer típusú változót használnánk.
Értékadáskor, kifejezésekben automatikus konverzió történik a boolean, a real és az enum típusokra.
Léteznek explicit konverziós lehetőségek is: str2int, int2str, str2int64, int642str
Változó deklarálásra példa:
Real: lebegőpontos típus
Decimális értékek is tárolható benne. Többnyire a nagypontosságú számításokhoz
használják, de a pénznem adat típusa is real.
Belső reprezentáció BCD kódolásban van. A BCD kódolás lehetővé teszi, hogy
nagyon pontosan történjen az értékek ábrázolása.
Értelmezési tartománya: -(10)127-ediken - től (10) 127-ediken -ig. 64 biten ábrázolva.
Használható literálként is, mindenhol, ahol real változó használható.
Példa a delkarálásra:
String: Karakterláncok, karaktersorozatok.
Karakterek, szövegek, például címek, telefonszámok adattípusaként használatos.
X ++, kulcsszava stringek deklarálására az str kulcsszó.
A stringbe meghatározatlan számú karakter fér.
Ha előre definiálható a felhasználni kívánt maximum karakter szám, akkor a string
deklarálható fix karakterszám tárolására.
Ekkor azonban, ha a definiált hossznál nagyobb hosszúságú karakterlánc kerül
értékadásra az eredmény csonkolva lesz.Összehasonlításkor lehetőség van annak megválasztására, hogy hogyan szeretnénk két stringet összehasonlítani.
LeftAligned, RightAligned, azaz bal oldalról ,vagy jobb oldalról indítva is történhet az összehasonlítás.
String literálokat idézőjelek közé kell tenni. Az idézőjel helyett állhat egyszerű aposztróf is. A kétféle jelölés egyenértékű.
Példa stringekdeklarációra:
TimeOfDay: Integer érték, másodpercben mérve az éjfél óta eltelt idő.
Értelmezési tartománya [0; 86400]. zárt intervallum, maximális értéke 86400
(23:59:59)
Példa a deklarációra:
UtcDateTime
A Date és a TimeOfDay típus felhasználásával született ez az új alaptípus.
Segítségével kifejezhető a dátum és az idő egy típus felhasználásával.
Időzóna információkat is tartalmaz. Az érték készlete a típusnak zárt
intervallum: [1900-01-01T00:00:00] - [2154-12-31T23:59:59]
Alapértelmezett kezdőértéke az intervallum alsó korlátja. Nincs beépített
típuskonverzió a nyelvben erre az adattípusra.
Az általános összehasonlító operátorok érvényesek, használhatóak a típussal.
Tömbök
Az array típus segítségével tömböket hozhatunk létre.
A tömb azonos típusú elemek indexelt sorozata.
A tömb elemeinek számozása 0-val kezdődik, tehát a tömb első eleme a 0.-ik pozíción lesz tárolva.
Háromféleképpen deklarálható adott hosszúságú, dinamikus, vagy "részben diszken helyet foglaló" lehet.
Az adott hosszúságú tömbök a deklarációnál definiált számú elemet tartalmazhatnak, míg a dinamikus tömbök lehetővé teszik, hogy a tömb mérete változtatható legyen.
Konténerek
A Container típus segítségével gyüjteményeket hozhatunk létre.
Elemei nem csak egyféle típussal rendelkezhetnek, hanem bármilyen típus előfordulhat egymást követő elemeiben.
Például lehetőség van integer, boolean, valamint Date típusú értékek egyetlen gyüjteményben történő szerepeltetésére.
Érték típussal rendelkezik a gyüjtemény típus, azaz alprogramnak nem referenciaként kerül áttadásra.
Példa a deklarálásra:
List osztály adattípus
Szekvenciálisan elérhető elemek gyüjteménye.
Egyféle típusú elemeket tartalmazhat, melyek bármilyen X++ típusok lehetnek, többnyire objektumok gyüjteményeként használt.
class List extends Object, vagyis az ősosztálya az Object osztály.
A lista deklarálásakor meg kell adni a lista elemeinek adattípusát. Ez később nem változtatható.
Példa a lista deklarációra:
Set osztály adattípus
Amennyiben nem fontos az elemek sorrendje, akkor elemek gyüjteményosztályaként használható ez a típus.
class Set extends Object
Hasonlóan a List típushoz elemei egyféle típusúak lehetnek, melyhez bármilyen X++ -ban létező típuso
felhasználható.Egy elem csak egyszer kerül tárolásra ebben a gyüjtemény jellegű adattípusban.
Az elemekhez való hozzáférés a "SetEnumerator" osztály segítségével történik.
Ime egy rövid példa a Set használatára:
Map osztály
Más programozási nyelvekben asszociatív tömbként ismert. A java-ban van hasonló tulajdonságokkal rendelkező beépített adattípus.
Az elemek kulcsukkal érhetőek el, a keresés, rendezés gyorsabb, mint más gyüjteményosztályban.
A kulcsok és az értékek típus X++ elemi típus, vagy objektum is lehet. Egy értékhez csak egy kulcs tartozhat.
Ugyanazzal a kulccsal egy új elem hozzáadása azt jelenti, hogy a régi érték elvész, helyettesítésre kerül az újjal.
A kollekción történő végiglépkedéshez a MapEnumerator nevű segédosztály használata szükséges.
Példa a Map használatára:
Struct osztály
Akárcsak a korábbi összetett típusok, ennek a típusnak az őse is az Object.
X++ típusú elemek meghatározott csoportját tároló adattípus.
Valahol az osztályok és a konténerek között helyezkedik el.
Leszármaztatni nem lehet belőle, a benne lévő adatok vagy a mező nevével, vagy a mező indexével lehetséges.
A deklarációs részben inicializálható.
Példa a Struct használatára: