A Delphi programozási nyelv

Nyelvi elemek

 A Delphiben vannak változók, konstansok, előre definiált konstansok stb., alapvetően a Delphi a Pascal nyelvre épül, de azért van pár különbség.

Jelkészlet

  Az Object Pascal eredetileg az ASCII karakterkészletet használja, az újabb verziókban a Unicode-ot. Fontos, hogy a nyelv nem kis-nagybetű érzékeny. Pl. az alma és az ALMA ugyanaz az azonosító. A speciális szimbólumok olyan nem alfanumerikus karakterek vagy karakterpárok, amelyeknek speciális jelentésük van. A következő karakterek speciális szimbólumok:
# $ & ' ( ) * + , – .  / : ; < = > @ [ ] ^  { }
A következő karakterpárok szintén:
(*, (.,  *),  .),  ..,  //,  :=,  <=,>=,  < >,
A [ ekvivalens a (. karakterpárral, a ] a .)-lel, valamint a {} ekvivalens a (* *)-lel.
Figyelem! A !, " , %, ?, \, _ , | és a ~ nem speciális karakterek.

Whitespace-ek mentén szabadon tagolható a kód :
 
  Példa:
  var
    Index: Integer;
    Name : String;
    Dummy
    :
    Boolean  ;
 

Azonosítók

  Egy azonosító bármilyen hosszú lehet, de csak az első 255 karakter szignifikáns. Az azonosítóknak betűvel kell kezdődnie, és utána bármennyi betű (a Unicode verziók esetében pl. ékezetes betűk is) vagy szám állhat. Az aláhúzás jel (_) a betűkhöz tartozik. Fenntartott szavak nem lehetnek azonosítók. Ha olyan azonosítót használunk, amely több mint 1 helyen van deklarálva, szükség lehet minősített azonosítók használatára. A szintaxis: Azonosító1.Azonosító2

Fenntartott szavak

  A következő szavak fenntartottak, nem lehet azonosítóként használni vagy újradefiniálni őket:
and array as asm begin case class const constructor destructor dispinterface div do downto else end except exports file finalization finally for function goto if implementation in inherited initialization inline interface is label library mod nil not object of or out packed procedure program property raise record repeat resourcestring set shl shr string then threadvar to try type unit until uses var while with xor
 Az újabb Delphi verziókban mégis van lehetőség a használatukra az & jel segítségével:
&type

Literálok

Az egész és valós konstansok alakja a szokásos. A számjegyek között nem lehet vessző vagy szóköz. Ha egy számliterálban pont vagy exponenciális rész van, akkor valós, egyébként egésznek számít. 16-os számrendszerben is megadhatjuk az értéket, ha $ jellel kezdjük a számot.
Delphiben a karakterliterálokat és a stringeket szimpla aposztróf közé kell rakni. String belsejében 2 egymás utáni aposztróf a szövegben 1 sima aposztrófként jelenik meg. Pl:
'Helló' {Helló}
'You''ll see' '  {You'll see}
''''  {'}
''  {} üres string

Ezen kívül lehetőség van control karakterek megadására is: # majd utána a karakter ASCII ill. UTF-16 kódja. Pl:
'1.sor'#13#10'2.sor'
Itt az első és a második sor közé egy sorvégjel kerül.

Megjegyzések

  Delphiben 3-féle megjegyzést írhatunk

  1. {kapcsos zárójel közti szöveg megjegyzés}
  2. (*a nyitó zárójel csillag és csillag csukó zárójel közti szöveg szintén megjegyzés*)
  3. //dupla perjel után a sor végéig minden megjegyzés

Ezen belül a { vagy (* után közvetlenül $ fordítói direktívát jelöl.
Azonos típusú zárójeles megjegyzés nem ágyazható egymásba, a kétféle zárójel kombinációja is csak egy szintig működik.

Fordítási direktívák

A Delphi fordító számos apró beállítási lehetőséget tartalmaz, amelyeket a fordítói direktívákkal a forráskódból is állíthatunk. Más nyelvekben ezt pragmának szokás nevezni. Ide tartoznak továbbá a C preprocesszor működéséhez hasonló direktívák. Néhány direktívát fontos megismerni, mivel hatással vannak a program szemantikájára. Számos direktíva egy kétállapotú kapcsoló, valamint van rövid és hosszú neve. Ilyenkor az állapotot a rövid változatnál + vagy -, a hosszú változatnál ON vagy OFF formában jelezzük. Pl. {$A+} ugyanazt jelenti, mint az {$ALIGN ON}. Több kapcsoló jellegű direktíva kombinálható: {$A8,B-,C+} stb. Ha az IDE-ben programozunk, a Ctrl+O, O billentyűparancs beszúrja a fájl elejére az összes direktívát, ezek állapota ugyanis függhet a projekt beállításaitól is.

DEFINE, IFDEF és társai

A {$DEFINE név} direktíva csak a feltételes fordításkor ellenőrizhető szimbólumokat tud definiálni, a forráskódban behelyettesítés nem történik. Továbbá a szimbólumoknak nem adható érték, és csak egy forrásfájlon belül érvényesek. Az {$UNDEF név} töröl egy ilyen szimbólumot. Az {$IFDEF név} után kezdődő kódrészletet csak akkor veszi figyelembe a fordító, ha a szimbólum definiálva van. Az {$IFOPT opció} egy másik direktívától teszi függővé a fordítást (pl. {$IFOPT R+}). Mindkettőhöz tartozhat {$ELSE} blokk. A feltételes fordítás végét {$ENDIF} jelzi.

INCLUDE
Formátuma {$I fájlnév}, nem összetévesztendő az IOCHECKS direktívával. A Delphiben van valódi modularitás, ezért nem ajánlott az INCLUDE használata. Utasítás (beleértve a blokk utasítást) közepébe nem tudunk fájlt beszúrni.
LINK
A {$LINK fájlnév} direktívával más nyelven írt tárgykódokat tudunk a programunkhoz szerkeszteni. Az alapértelmezett kiterjesztés .OBJ.
RESOURCE
A {$R fájlnév} direktívával egy Windows erőforrásfájlt szerkeszthetünk a programhoz. Az alapértelmezett kiterjesztés .RES. A fájlnévben a * karakter az aktuális forrásfájl nevét jelenti (kiterjesztés nélkül). Pl. a formokhoz tartozó egységek elején szerepel a {$R *.dfm} direktíva.
ALIGN
Beállítja a rekordok igazításának méretét. Paramétere lehet 1, 2, 4 vagy (újabban) 8. Az {$A-} ugyanazt jelenti, mint az {$A1}. {$A+} jelentése a fordítótól függ, a legújabb fordítókban {$A8}. Alapértelmezés: {$A+}.
APPTYPE
Azt állítja be, hogy konzolos vagy GUI alkalmazást szeretnénk-e fordítani. Lehetséges értékei: {$APPTYPE CONSOLE} és {$APPTYPE GUI}. Alapértelmezés: {$APPTYPE GUI}.
BOOLEVAL
A logikai operátorok teljes kiértékelését kapcsolja ki/be. Alapértelmezés: {$B-}.
ASSERTIONS
Az assert() függvény figyelembe vételét kapcsolja ki/be. Alapértelmezés: {$C+}.
DEBUGINFO
A hibakereső információk generálását kapcsolja ki/be. Csak bekapcsolt állapotában használhatjuk a debuggert, viszont ekkor a végrehajtható fájl nagyobb és a fordítás lassabb. Alapértelmezés: {$D+}.
LOCALSYMBOLS
A DEBUGINFO-val együtt használva lehetővé teszi a helyi szimbólumok információinak tárolását, így a debuggerben megnézhetjük és megváltoztathatjuk a futó program változóinak értékét, a futási veremben látjuk a paramétereket stb. Alapértelmezés: {$L+}.
EXTENDEDSYNTAX
A Turbo Pascalból ránk maradt ősrégi direktíva, kikapcsolása tönkreteheti a legtriviálisabb programokat is. Bekapcsolt állapotában a függvények visszatérési értéke eldobható, a függvény törzsében a visszatérési értékre hivatkozhatunk a Result változóval, a stringek értékül adhatók a karaktertömböknek, azok pedig kompatibilisek a PChar típussal. Alapértelmezés: {$X+}.
HINTS
Bekapcsolt állapotában a fordító segítő üzeneteket ad pl. nem használt változó, felesleges értékadás és biztosan 0-szor lefutó ciklusok esetén. Alapértelmezés: {$HINTS ON}.
WARNINGS
Bekapcsolt állapotában a fordító figyelmeztető üzeneteket ad pl. inicializálatlan változó, függvényben hiányzó visszatérési érték, absztrakt objektum létrehozása esetén. Alapértelmezés: {$WARNINGS ON}.
WARN
Hasonló, mint az előző, de csak bizonyos típusú figyelmeztetéseket állít be. A WARN szó után meg kell adni a figyelmeztetés nevét, utána pedig az ON vagy OFF állapotot. A lehetséges nevek fordítónként mások lehetnek, pl. {$WARN FOR_LOOP_VAR_UNDEF ON} bekapcsolja azt a figyelmeztetést, amely egy for ciklus változójának a ciklus utáni kiolvasásakor keletkezik.
IOCHECKS
{$I+} állapotban bizonyos I/O függvények kivételt dobnak hiba esetén. {$I-} állapotban az IOResult függvénnyel nekünk kell lekérdeznünk, hogy történt-e hiba. Érdekessége, hogy a Turbo Pascalban a kivételkezelés hiánya miatt csak így lehetett lekezelni az I/O hibákat. Alapértelmezés: {$I+}.
LONGSTRINGS
Meghatározza, hogy a string kulcsszó hosszú string típust jelent-e. Alapértelmezés: {$H+}.
MINENUMSIZE
A felsorolás típusok minimális méretét állítja be, paramétere lehet 1, 2 vagy 4. C/C++ függvények hívásánál hasznos lehet. Alapértelmezés: {$Z1}.
OPTIMIZATION
Bekapcsolt állapotában a fordító optimalizálja a kódot, bizonyos változókat a CPU regiszterekbe rak, eliminálja az ismétlődő részkifejezéseket, bevezet indukciós változókat stb. Viszont bizonyos esetekben nehezíti a debugger használatát. Alapértelmezés: {$O+}.
OVERFLOWCHECKS
Bekapcsolt állapotában az egész típusok műveletei kivételt dobnak túlcsordulás esetén. Lassítja a programot. Alapértelmezés: {$Q-}.
RANGECHECKS
Bekapcsolt állapotában a tömb és string típusok kivételt dobnak túlindexelés esetén. Lassítja a programot. Alapértelmezés: {$R-}.
TYPEDADRESS
Meghatározza a @ operátor által visszaadott pointer típusát. Alapértelmezés: {$T-}.
WRITEABLECONST
Bekapcsolt állapotában a típussal rendelkező konstansoknak megváltoztatható az értéke. Ez a Turbo Pascalnak megfelelő viselkedés, viszont a Delphiben ehelyett megjelent a változók kezdőértékadásának lehetősége. Alapértelmezés: {$J-}.