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
- {kapcsos zárójel közti szöveg megjegyzés}
- (*a nyitó zárójel csillag és csillag csukó zárójel közti szöveg szintén
megjegyzés*)
- //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-}.