Az DBase nyelv család

Alprogramok, modulok

Alprogramok,paraméterek

dBase:

A fõprogram fájlja csak és kizárólag a fõprogramból áll, nem szerepelhetnek benne alprogramok.

A strukturált programozás azomban megkívánja az alprogramok használatát. A dBase alapú nyelvekben ezt az úgynevezett eljárásfájl használatával valósították meg.
Az eljárásfájl, mint ahogyan azt a neve is mutatja egy olyan önálló állomány, amelyben csak alprogramok találhatók. Szintén eltérést jelent a ma megszokott programozási nyelvekhez képest, hogy az eljárásfájlnak nincsen prototípusa (headerfile). Erre nincs is szükség, hiszen ez egy interpretált nyelv, így nincs linker, tehát prototípus sem kell a számára.

Újabb különbség, hogy a felhasználó, azaz a programozó csak eljárásokat definiálhat, függvényeket nem. Ezzel szemben minden beépített alprogram függvény, egyetlen beépített eljárás sincs.

Egy alprogram felépítése:
PROCEDURE < eljárásnév >
...
RETURN [TO MASTER]

Mint látható a fõprogramhoz hasonlóan, az alprogramokra sincs kötött nyelvi szerkezet. A meghívott eljárások újabbakat hívhatnak meg.

A "beágyazásnak" elvi korlátai nincsenek csak "fizikazi" olyan szempontból, hogy minden elindított és még be nem fejezett önálló állomány nyitott állmánynak számít, és a dBase egyszerre csupán 15 nyitot állománnyal tud foglalkozni. Ezért a dBase-ben lehetőség van úgynevezett procedúra-állományok létrehozására, melyek már több eljárást (maximum 32) tartalmaznak. Az eljárásnévre ugyanazok a szabályok érvényesek, mint a változó és mezõnevekre, kivéve, hogy ez csupán nyolc karakter hosszú lehet. A PROCEDURE és RETURN közt ugyanazokat az utasításokat adhatjuk ki, mint a fõprogramban, és ugyanazok a megkötések érvényesek itt is. Ebbõl is jól látható, hogy a PROCEDURE és RETURN nem utasítások, csupán fenntartott szavak, amiket az egyes alprogramok egymástól való elhatárolására használ az interpreter.

Egy alprogram hívása:
DO < eljárásnév >
vagy
DO < procedura-állomány >
Előfordulhat,hogy egy mélyen begyázott programból azonnal a főprogramhoz szeretnénk visszatérni, ilyenkor a RETURN uatasítást ki kell egészíteni a következő formában:
RETURN TO MASTER

Procedura állomány megnyitásásra szolgál a :

 SET PROCEDURE TO < állománynév >
környezetei paramétert beállító parancs. Egyszerre csak egy proceduraállományt tarthatunk nyitva, a következő megnyitása lezárja az előzőleg megnyitottat. Ezt megtehetjük sajátkézzel is a következő módokon:
SET PROCEDURE TO
vagy
CLOSE PROCEDURE
Az eljárások hívása paraméterezéssel:
DO < eljárásnév > WITH < paraméterlista >
A szubrutint elő kell készíteni a paraméterek fogadására a
PARAMETRS < memóriaváltozó lista > 
utaítássorral.(a változók száma és sorrendje lényeges!!) dBase III PLUS-ban már gépi kódú programok meghívására is van lehetőség. Elsőször a
LOAD < bin. áll. név >
segítségével a programot be kell tölteni az operatív memóriába, majd a hívást a
CALL < modul_név > [WITH < kif._lista >]
parancs végzi. A végén a gépi kódú modulokat rutinokat külön kell törölni a memóriából a
 RELEASE MODUL < modulnév > 
parancs kiadásával. A meóriában egyszerre maximum 5 gépi kódú modul helyezkedhet el.

Clipper:

FONTOS: eljárások és függvéynek deiníciója itt sem ágyazhatóak egymásba!
Az eljárás és formális paramétereinek leírása:
[ STATIC ] PROCEDURE < eljárásnév > [ ( < paraméterlista > ) ]
[ FIELD < azonosító lista > [ IN < aliasnév > ] ]
[ LOCAL < azonosító > [ [ := < kezdõérték > ] , ... ] ]
[ MEMVAR < azonosító lista > ]
[ STATIC < azonosító > [ [ :=
< kezdõérték > ] , ... ] ]
< végrehajtandó utasítások >
[ RETURN ]

eljárásnév: Az eljárás neve. Tetszõleges hosszú lehet, de csak az elsõ tíz karaktert veszi figyelembe. Betûket, számokat és az aláhúzásjelet tartalmazhatja, azonban az aláhúzásjel az elsõ karakter helyén más célra lett lefoglalva.

paraméterlista: Egy vagy több paraméterváltozó felsorolása. Az itt felsorolt változók local deklarációt kapnak.
STATIC PROCEDURE: Egy olyan eljárást deklarál, mely csak abból a program állományból érhetõ el, amelyik azt tartalmazza.
LOCAL: Az aktuális eljárásban érvényes változók és tömbök deklarálása és igény szerint kezdõértékkel ellátása.
STATIC: Azoknak a változóknak és tömböknek a deklarálása, és igény szerint kezdõértékkel ellátása, amelyek az adott eljáráson kívül a program más részein is érvényesek.
FIELD: A mezõnévként használt azonosítók listája. Az IN kulcsszó alkalmazásával megadható annak az adatbázisnak a neve, amely a deklarált mezõt tartalmazza. Egyébként mindig a hivatkozás helyén aktuális munkaterületen megnyitott adatbázis mezõneveként értelmezi.
MEMVAR: A private vagy public memóriaváltozók vagy tömbök deklarálása.
RETURN: Az eljárásból való kilépést jelzi, és a hívó programnak, vagy felhasználói függvénynek adja vissza a vezérlést. Ha nincs megadva, akkor a visszatérés az eljárásdefiníció végén történik. Az eljárásdefiníció végét jelenti egy másik PROCEDURE vagy egy FUNCTION utasítás, illetve egy állomány-vége jel.
A paraméterek:

Az eljárás paramétereket tud átvenni a hívó eljárásból, felhasználói függvénybõl vagy a DOS-tól. Kétféleképpen adható meg: vagy a paraméterlistában, vagy a PARAMETERS utasítás után, de a kétféle megadási mód nem keverhetõ. Az eljárás a paraméterértékeket az argumentumlistában megadott sorrendben veszi figyelembe. A megadott értékek számának nem kell megegyezni: ha több argumentumérték lett megadva, akkor a feleslegesek figyelmen kívül maradnak, ha kevesebb, akkor a hiányzó paraméterek értéke NIL lesz. Az argumentumok kétféleképpen adhatók meg: érték vagy hivatkozás szerint. Az érték szerinti argumentum egy kifejezés vagy egy változónév megadása, amely esetben az eljárás a paraméterértéket tetszés szerint módosíthatja, a hívó eljárásba visszatérve az eredeti érték marad meg. A hivatkozás szerinti argumentum esetében (ekkor a változó neve elé egy @ jelet kell írni) a változó értéke a hívó eljárásba való visszatérés után az eljárás által módosított érték lesz. Mezõnév csak érték szerinti argumentumként adható meg. Mezõnév átadása esetén azt zárójelbe kell tenni, és elé a FIELD elõtagot kell illeszteni, ellenkezõ esetben hibajelzést kapunk.

A függvény és formális paramétereinek leírása:
[ STATIC ] FUNCTION < függvénynév > [ ( < paraméterlista > ) ]
[ LOCAL < azonosító > [ [ := < kezdõérték > ] , ... ] ]
[ STATIC < azonosító > [ [ := < kezdõérték > ] , ... ] ]
[ FIELD < azonosító lista > [ IN < aliasnév > ] ]
[ MEMVAR < azonosító lista > ]
< végrehajtandó utasítások >
RETURN < kifejezés >
függvénynév
Felhasználói függvény neve. Tetszõleges hosszú lehet, de csak az elsõ 10 karaktert veszi figyelembe. Betûket, számokat és az aláhúzásjelet tartalmazhatja.
paraméterlista:
Egy vagy több paraméterváltozó felsorolása. Az itt felsorolt változók local deklarációt kapnak.
STATIC FUNCTION:
Egy olyan felhasználói függvényt deklarál, amely csak abból a program állományból érhetõ el, amelyik azt tartalmazza.
LOCAL:
Az aktuális függvényben érvényes változók és tömbök deklarálása igény szerint kezdõértékkel ellátása.
STATIC:
Azoknak a változóknak és tömböknek a deklarálása, és igény szerint kezdõértékkel ellátása, amelyek az adott függvényen kívül a program más részein is érvényesek.
FIELD:
A mezõnévként használt azonosítók listája. Az IN kulcsszó alkalmazásával megadható annak az adatbázisnak a neve, amely a deklarált mezõt tartalmazza. Egyébként mindig a hivatkozás helyén aktuális munkaterületen megnyitott adatbázis mezõneveként értelmezi.
MEMVAR:
A private vagy public memóriaváltozók vagy tömbök deklarálása.
RETURN kifejezés:
A felhasználói függvénybõl való kilépést jelzi, ahol a kifejezés a visszaadott érték. Minden függvény végén kötelezõen kell szerepelnie egy RETURN-nek., de a rutinon belül tetszõleges helyen több RETURN is elõfordulhat.

A paraméterek átadása hasonló módon történik, mint az eljárások esetében.

Az eljárások hívása a következõ módokon történhet:
< eljárásnév > ( [ < argumentumlista > ] ) 
DO < eljárásnév > [ WITH  ] 
< aliasnév > -> ( < eljárásnév > ( [ < argumentumlista > ] ) ) 

Ha az argumentumok száma nem egyezik meg a hívott eljárás paramétereinek számával, akkor kevesebb argumentum megadása esetén a további paraméterek értéke NIL;

Több argumentumérték megadása esetén a felesleges értékek figyelmen kívül maradnak.

Paraméterek számának lekérdezése: PCOUNT()

Az argumentumok megadása kétféleképpen lehetséges:
Függvények hívása a következõ módokon történhet:
< függvénynév > ( [ < argumentumlista > ] ) 
< aliasnév > -> ( < függvénynév > ( [ < argumentumlista > ] ) ) 

Függvényhívásnál az alapértelmezés szerinti értékeket nem kell átadni.

Az elõbbieken kívül a CALL utasítással hívhatók meg C vagy Assembly nyelvû eljárások. Szintaxisa:

CALL < eljárásnév > [ WITH < paraméterlista > ]

Továbbá a RUN paranccsal DOS parancs vagy felhasználói program indítható:

RUN | !* < parancs >
Az alprogramokkal kapcsolatos egyéb szabályok:

Foxpro:

Alprogramokat külön forrásfájlokban definiálhatunk, amiket a

paranccsal tölthetünk be, egyébként ha nem betöltött alprogramra hivatkozunk futás idejû hiba lép fel.

Eljárásokat és függvényeket is definiálhatunk a PROCEDURE illetve a FUNCTION kulcsszavakkal. A kulcsszó után csak az alprogram nevét adjuk meg, a paramétereit a következõ sorban a PARAMETERS kulcsszó után soroljuk fel (csak a neveket mivel, típusuk a kapott értéktõl függ).

Az aktuális paraméterek számának nem kell megegyeznie a formális paraméterek számával, ha több paramétert írunk, mint amennyit vár,akkor a “fölös” paramétereket figyelmen kívül hagyja, ha kevesebbet adunk meg, akkor a nem megadottak értéke .F. lesz. Annak a kezelésére, ha kevesebb paramétert kapott, az aktuális paraméterek számát lekérdezhetjük a PCOUNT vagy a PARAMETERS() függvénnyel. A PCOUNT() az adott alprogram paramétereinek számát adja meg, a PARAMETERS() pedig az utoljára meghívott alprogram paramétereinek számát.

Függvény visszatérõ értékét a RETURN utasítással adhatjuk meg, ha nem RETURN-nel fejezõdik be, akkor a visszaadott érték .T.
A RETURN utasítással nem csak közvetlenül a hívó programhoz térhetünk vissza, hanem egy általunk megadott programhoz is, vagy a fõprogramhoz is (RETURN TO proc_név, RETURN TO MASTER).

Nem jelezzük explicit az alprogram végét, hanem egy újabb FUNCTION vagy PROCEDURE kulcsszó, illetve a fájl vége az alprogram végét jelzi. Ebbõl következik, hogy az alprogramok nem ágyazhatók egymásba.

A paraméterátadás módját a SET UDFPARMS TO VALUE | REFERENCE utasítással állíthatjuk be. Lehet érték szerinti vagy cím szerinti. Az alapbeállítások módosíthatók; ha egy paramétert (paraméter) formában adunk meg akkor érték szerint, ha @paraméter formában adunk meg, akkor referencia szerint adódik át. Ha egy tömböt érték szerint adunk át, akkor csak a tömb elsõ eleme adódik át, referencia szerint az egész tömb.

Függvény hívható a nevével és zárójelben a paramétereivel, vagy a DO függvény_név WITH paraméter_lista szintaxissal is.

Az alprogramok túlterhelésére nincs lehetõség.