A Visual Basic programozási nyelv

Alprogramok, modulok

1. Szintaxis

Bevezetés

Visual Basicben általában eseményvezérelt alkalmazásokat készítünk. Az esemény olyan hatás, amit egy ablak vagy control fogad, és reagál rá egy Visual Basic kódrész végrehajtásával. Minden control előre definiált eseménykészlettel rendelkezik. Ugyanazt az eseményt több objektum is képes felismerni, ezért az eseményt fogadó objektumtól is függ, hogy milyen alprogram hajtódik végre válaszként. Az esemény-eljárást tehát az esemény és az objektum neve együttesen azonosítja. Alapértelmezésként az alkalmazás első ablakához van társítva a Startup Form tulajdonság, ami azt jelenti, hogy az alkalmazás futtatásakor végrehajtódik az ablak Form_Load-hoz tartozó alprogram, majd a Windows várja a beérkező eseményeket. Egy program futása akkor ér véget, ha minden ablaka le van zárva és nincsen már végrehajtható kód. Az End utasítást bárhol kiadva azonnal befejezhetjük az alkalmazás futtatását.

Esemény-eljárások

Ha egy objektum felismeri egy esemény bekövetkeztét, akkor automatikusan meghívja a hozzárendelt alprogramot. Ez egy Sub és End Sub közé zárt végrehajtható kódot tartalmaz. Az esemény-eljárás az esemény és az objektum nevéből áll, melyek "_" karakterrel vannak elválasztva. Ha egy eljárás neve nem egyezik egyik control eljárásának nevével sem, akkor az az ablak általános alprogramja lesz.

Általános alprogramok

Ezek az alprogramok csak akkor hajtódnak végre, ha az alkalmazás egy pontjáról expliciten meghívjuk őket. Lehetnek eljárás vagy függvénytípusúak is. A két típus közt az a különbség, hogy az eljárásnak (Sub) nincsen visszatérési értéke, míg a függvénynek (Function) van. Az alprogramok rekurzív hívása megengedett. Függvények esetén a függvény neve zárójelek nélkül a visszatérési értéket jelenti (még értékadás jobb oldalán is), paraméterlistával együtt a függvény hívásának eredményét.

Eljárás deklarálása

Sub proc_nev (par1, par2, ... As típus1, parx, pary, ... As típus2) Utasítások End Sub

A paraméterek átadása alapértelmezésben hivatkozás szerinti, de ha egy paramétert érték szerint szeretnénk átadni, akkor a neve elé a "ByVal" kulcsszót kiírva megtehetjük. Eljárás hívásakor az argumentumokat nem kell zárójelek közé rakni kivéve, ha a "Call" utasítással hívjuk.

swap A,B call swap (A,B)

Függvények deklarálása

Function fnev (par1 [As típus1], parx, pary, ... [As típus2]) [As típus] Utasítások End Function

Függvények esetén mindig ki kell írni a zárójeleket az argumentumlistánál. Ha nem adjuk meg az As kulcsszó után a függvény visszatérési értékének típusát, akkor az automatikusan Variant lesz. A visszatérési érték a függvény nevéhez rendelődik hozzá. A függvény törzsében nem kell return utasítást használnunk, de az "fnev = érték" utasításnak szerepelnie kell.

Függvény hívásakor a Visual Basic először az adott ablak- vagy kódmodulban keres, csak ezután keres a többi kód modulban. Az aktuális ablakon kívül nem keres más ablak-modulban. Más ablak-modulok műveleteit csak minősített hivatkozással hívhatjuk meg. Definiálhatunk egy kód modulban private alprogramokat is, ezek lokálisak lesznek az adott modulra nézve.

2. Paraméterátadás

Az eljárások argumentumai alapértelmezés szerint Variant típusúak, ha expliciten nem adtuk meg a típusukat. A paraméterek átadása alapértelmezés szerint hivatkozás szerint történik. Variant típusú paraméterek átadásakor felléphet a következő probléma:

a függvény:

Function Sor (kar As String, ByVal n As Integer)

hívása:

Dim c As Variant c="Akarmi" vissza=Sor(c,5)

Ekkor a Visual Basic nem tud mit kezdeni az első paraméterrel, mivel az variant, a függvény viszont String-et vár. Ha egy függvény egy argumentumára valamilyen más típusú adattal szeretnénk hivatkozni, akkor azt jelezni kell.

Ha az argumentumot zárójelbe tesszük, akkor a Visual Basic kiértékeli híváskor:

vissza=Sor((c),5)

ByVal kulcsszó használatával deklaráljuk az argumentumot, ekkor ugyanis a változó értékét adjuk át:

Function Sor (ByVal kar As String, ByVal n As Integer) Dim C As String, k As Variant C="akarmi" : k="3" vissza=Sor(c,k)

Az alprogramoknak lehetnek opcionális paraméterei is. Ha ilyet szeretnénk deklarálni, akkor a paraméter neve elé ki kell írni az Optional kulcsszót, és az utána következő paramétereknek is opcionálisnak kell lenniük. Az opcionális paraméterekhez rendelhetünk alapértelmezett értéket is, amit akkor vesznek fel, ha az alprogram hívásakor a paraméterek között nem szerepel az adott paraméterhez tartozó érték.

Sub ListText(x As String, Optional y As Variant = 12345) List1.AddItem x List1.AddItem y End Sub

Egy alprogramnak átadható meghatározatlan számú argumentum is, ekkor a ParamArray kulcsszót kell használnunk. Ekkor a For Each...Next ciklus segítségével lépkedhetünk végig az argumentumokon, amelyeket mint halmazt kezelhetjük.

Sub Sum(ParamArray intNums()) For Each x In intNums y = y + x Next x intSum = y End Sub

Egy alprogram hívásakor, aktuális paramétereket megfeleltetjük a formális paramétereknek. Ezt megtehetjük úgy is, hogy az alprogram definiciójában megadott sorrendben adjuk meg az aktuális paramétereinket, vagy pedig explicit megmondjuk, hogy melyik formális paraméternek szeretnénk megfeleltetni az aktuálist. Ez a módszer hasznos, ha sok opcionális formális paraméter van. Ez a paraméternév := érték szerkezettel tehetjük meg.

Sub ListText(strName As String, Optional strAddress As String) List1.AddItem strName List1.AddItem strAddress End Sub Private Sub Command1_Click() ListText strAddress := "cim", strName := "Név" End Sub

3. Túlterhelés

A VB nem támogatja az alprogramnév túlterhelését, azonban az opcionális paraméterekkel egyfajta ál-túlterhelést mégis elérhetünk.

A VB.NET engedélyezi az alprogramnév túlterhelést, mivel az alprogramot a neve mellett a paraméterezése is azonosítja. Az operátor túlterhelésre azonban nincs lehetőség.

Példa a függvénytúlterhelésre:

Overloads Function valami(ByVal s As String) As String ... End Function Overloads Function valami(ByVal i As Integer) As String ... End Function Dim str As String str = valami("hello") str = valami(42)

Ha túl akarjuk terhelni valamelyik függvényt, akkor explicit ki kell írnunk az Overloads kulcsszót.