A Chrome programozási nyelv

Típusok, típuskonstrukciók



Típus kikövetkeztetés

Változó típus kikövetkeztetéssel lehet lokális változókat deklarálni úgy hogy nem adjuk meg a típust, de ez csak akkor használható ha a változó típusa meghatározható a kontextusból. Például:

var x := new SomeTypeName(...);

Ez megegyezik ezzel:

var x : SomeTypeName := new SomeTypeName(...);

A típus kikövetkeztetést lehet alkalmazni alap típusokra nem csak osztályokra. Például:

var x := 3; var s := 'Hello';

Ilyenkor a lehető legszűkebb típus lesz a változó típusa, például: integer nem longint. Csak a lokális és az inline változóknál lehet használni a típus kikövetkeztetést.

Egész típusok

Név Méret Előjel Tartomány
ShortInt 1 bájt előjeles -128...127
SmallInt 2 bájt előjeles -32768...32767
Integer 4 bájt előjeles -2147483648...2147483647
LongInt 4 bájt előjeles -2147483648...2147483647
Int64 8 bájt előjeles -9223372036854775808 .. 9223372036854775807
Byte 1 bájt előjel nélküli 0...255
Word 2 bájt előjel nélküli 0...65535
LongWord, Cardinal 4 bájt előjel nélküli 0..4294967295

Valós típusok

Név Méret Tartomány
Single 4 bájt -1.5E-45...3.4E38
Real, Double, Extend 8 bájt -5.0E-324...1.7E308

Karakter típusok

Név Méret Tartomány
WideChar, Char 2 bájt Unicode

Karakterlánc típusok

Megegyezik a .NET System.Strings osztályával

Logikai típusok

Név Méret Tartomány
Boolean 1 bájt 0, 1, False, True

Mutató, referencia típusok

A mutató típus olyan változót határoz meg, amely egy adott memóriaterületre mutat. Pl.: x: ^Integer;
A @ operátor segítségével bármely objektum (függvény, változó, stb.) címét lekérdezhetjük. Például:

method MainForm.Test2; var x: Integer; pinned; begin x := @MyIntegerArray[0]; x[0] := 15; x[10] := 12; … end;

Nullable típusok

Minden változónak vagy egy alapértelemzett értéke, amire inicializálódik, ha nem adtunk neki értéket. Azonban a nullable kulcsszó használatával elérhetjük, hogy az értéket ne az alapértékre inicializálja hanem nil-re. Például:

SomeClass = class b1: Boolean; // initialized to false b2: nullable Boolean; // initialized to nil i1: Integer; // initialized to 0 i2: nullable Integer; // initialized to nil

Ennek a típusnak az előnye, hogy könnyen ellenőrízni tudjuk, hogy egy változó kapott-e már értéket. Pl.:

var priority: nullable Integer; begin if assigned(priority) then ; // checks if priority isn't null if priority = nil then; // checks if priority is null if priority <> nil then; // checks if priority isn't null

Anonim típusok

A nyelvben lehetőségünk van névtelen osztályokat deklarálni egy metodus törzsében. Például:

var lUser := new class(Name := 'Peter'; Age := 49); Console.WriteLine(lUser.Name+' is '+lUser.Age.ToString+' years old');

Nested típusok

Ezek olyan típusok amelyek figyelembe veszik másik típusok tagjait (általában osztályokét vagy rekordokét). A "nasted in" kulcsszóval kell definiálni és utána kell írni a szülő típust. Például:

type Address nested in Person = public class ... end; Gender nested in Person = public enum (Male, Female); ClickEventHandler nested in Button = private delegate ...;

Delegates

A "delegate" kulcsszóval saját esemény típusokat hozhatunk létre. Például:

type MyEvent = delegate (Sender: Object; Args: MyCustomArgs);

Felsorolási típusok

Az enum vagy a flag kulcsszó és a felsorolás neve után kapcsos zárójelben soroljuk fel az értékeket. A flags abban különbözik az enum-tól, hogy a felsorolási típus értékei nem 0,1,2... lesz hanem a kettes számrendszer számait kapják értékül 1,2,4,8,16... Például:

type Color = (Red, Blue, Green); ... MyObject.SurfaceColor := Color.Blue;

A név után opcionálisan megadható a felsorolás típusa (pl: hogy kisebb helyet foglaljon). Illetve az egyes elemekhez rendelt érték.

type Season = enum(Spring, Summer, Fall, Autumn=Fall, Winter) of byte; Color = (Red, Blue=4, Green);

Halmazok

A halmaz típus bír annak a szokásos műveleteivel: in(tartalmazás), +(unió), -(differencia), *(metszet), illetve lehet halmazok egyenlőségét lekérdezni(=), és van halmazok közti <=, >=, <>(nem egyenlő) műveletek. A halmaz értékeinek 0-nál nagyobbnak kell lennie! Egy halmazban tárolt elem maximális értéke 0x100000 lehet (azaz 128 kbit-nél nem foglalhat többet egy érték a memóriából). Példa:

Type MySet1 = set of 1000; // set with elements 0..999 MySet2 = set of (Abc, Def, Ghi); // implicit enums

Tömbök

A tömb inicializálódik, ha eleget tesz a következő 3 szabálynak:

  1. A tömb határa definiált (pl az "array[0..] of byte" nem inicializálódik, míg az "array[0..10] of byte" igen )
  2. a tömb mezőként (field) vagy lokális változóként van definiálva
  3. nincsen egy explicut kijelölt inicializáló értéke

Dinamikus (unbound) tömbök. Példa:

var Array1: array of String; Array2: array of Byte; begin Array1 := new String[25]; // 25 strings 0..24 Arrays2 := new Byte[40]; // 40 arrays of string (nil'ed) …

Kötött (bound) tömbök. Példa:

type StringArray1: array [0..5] of String; StringArray2: array [0..] of String; StringArray3: array [0.., 0..] of String; … var array1: StringArray1; array2: StringArray2; array3: StringArray3; array4: array[0..5] of Integer; begin array1 := new StringArray; // 6 strings 0..5 array2 := new StringArray2(25); // 25 strings 0..24 array1 := new StringArray(45, 12); // 45x12 matrix of strings

Inline tömb konstans: tömbök megadása elemei felsorolásával. Példa:

x := [1,2,3] var y: array of Integer := [1,2];

Statikus tömbök: ez referencia típusú. Példa:

var b: ^Byte; begin b[0] = 15; b[1] := 12; end;

Rekordok

Nem csak váltózók gyűjteménye mint object pascalban hanem lehetnek benne eljárások is. Az osztályokhoz hasonlóan a rekordok változóinak és metódusainak is lehet megadni láthatóságot (alapértelmezésben: assembly). Szintén az osztályokhoz hasonló tulajdonsága, hogy egy vagy több interfészt is megvalósíthat Például:

type Person = Record method toString: String; override; Forename,Surname: String; Born: Integer; end;

Osztályok

Viselkedését és lehetőségeit tekintve megfelel a Java és a C# megközelítésének. Részletesebben erről az Objektum-elvű programozás fejezetben lesz szó. Az osztály referencia típus, melynek adattagok, konstruktorok, destruktorok, metódusok, konstansok, propertik, operátorok, indexerek, osztály adattagok lehetnek a deklarációs részében.

type MyClass1 = public class public constructor; virtual; class method TestIt; virtual; end;