Eljárások és függvények

From Apache OpenOffice Wiki
Jump to: navigation, search
Book.png


Az eljárások és a függvények a programstruktúra fő alapelemei. Segítségükkel egy összetett probléma több alfeladatra osztható.

Eljárások

A Az eljárás végrehajt egy műveletet anélkül, hogy visszaadna értéket. A szintaxisa a következő:

Sub Teszt
  ' ... ezt itt az eljárás tényeges kódja
End Sub

Ez a példa definiál egy Teszt nevű eljárást, amely tartalmaz egy kódot, amely a program bármely pontjáról elérhető. Az eljárás meghívásához az eljárás nevét kell beszúrni a program adott pontján.

Függvények

A A függvény, akárcsak az eljárás, programrészleteket foglal össze egy egységbe. Viszont az eljárással ellentétben, a függvény visszaad egy értéket.

Function Teszt
  ' ... ez itt a függvény tényeges kódja
  Teszt = 123
End Function

A visszatérési érték egyszerű értékadással megadható. Az értékadásnak nem kell a függvény végén lennie, bárhol elhelyezhető a függvényen belül.

Az előző függvény a következőképpen hívható meg a programból:

Dim A 
A = Teszt

Ez a kód definiálja az A változót, majd hozzárendeli a Teszt függvény visszatérési értékét.

A visszatérési érték többször is felülírható a függvényben. Ahogy a klasszikus értékadásnál is, a példában a függvény is azt az értéket adja vissza, amelyet utoljára hozzárendeltek.

Function Teszt
  Teszt = 12
  ' ... 
  Teszt = 123
End Function

Ebben a példában a függvény visszatérési értéke 123.

Ha az értékadás elmarad, a függvény a nulla értéket adja vissza (a 0-s számot numerikus értékeknél és üres értéket karakterláncoknál).

A függvény visszatérési értéke bármilyen típusú lehet. A típust ugyanúgy kell deklarálni, mint a változókat:

Function Teszt As Integer
  ' ... ez itt a függvény tényeges kódja
End Function

Eljárások és függvények megszakítása

In Az Apache OpenOffice Basicben az Exit Sub és az Exit Function paranccsal lehet félbeszakítani egy eljárás vagy függvény végrehajtását annak befejezése előtt, például hibakeresési célból. Ezek a parancsok megállítják az eljárást vagy függvényt, és a program futása visszatér oda, ahonnan az eljárást vagy függvényt meghívták.

A következő példa bemutat egy eljárást, amely megszakad, ha a HibaTortent változó értéke True (igaz).

Sub Teszt
  Dim HibaTortent As Boolean
  ' ...
  If HibaTortent Then
    Exit Sub
  End If
  ' ...
End Sub

Paraméterek átadása

A függvényeknek és eljárásoknak átadható egy vagy több paraméter. A paramétereket zárójelbe kell tenni a függvény vagy eljárás neve után. A következő példa definiál egy eljárást, amely egy A egész számot és egy B karakterláncot vár paraméterként.

Sub Teszt (A As Integer, B As String)
  ' ...
End Sub

Az Apache OpenOffice Basicben a paraméterek általában hivatkozásként kerülnek átadásra. A változókon végzett módosítás megmarad, amikor az eljárás vagy függvény kilép:

Sub Teszt 
  Dim A As Integer
  A = 10
  ErtekModositasa(A)
  ' Az A paraméter értéke most 20
End Sub
 
Sub ErtekModositasa(AzErtek As Integer)
  AzErtek = 20
End Sub

Ebben a példában a Teszt függvényben definiált A értéket a program átadja paraméterként az ErtekModositasa függvénynek. A program ezután módosítja az értéket 20-ra, és hozzárendeli AzErtek változóhoz, amely megmarad akkor is, amikor a függvény kilép.

Egy paraméter átadható értékként is, ha nem akarjuk, hogy a paraméternek módosuljon az értéke. Ha egy paramétert értékként akarunk átadni, győződjünk meg róla, hogy a ByVal kulcsszót beírjuk a paraméter elé a függvényfejlécben.

Az előző példában, ha módosítjuk az ErtekModositasa függvényt a következőre, akkor az A változó értéke nem fog módosulni. Az ErtekModositasa függvény meghívása után az A változó megtartja a 10 értékét.

Sub ErtekModositasa(ByVal AzErtek As Integer)
  AzErtek = 20
End Sub
Documentation note.png Az Apache OpenOffice Basicben a paraméterek átadása eljárásoknak és függvényeknek megegyezik a VBA-ban használt módszernek. Alapértelmezésként a paraméterek hivatkozás szerint kerülnek átadásra. Ha paramétereket érték szerint akarunk átadni, használjuk a ByVal kulcsszót. A VBA-ban használhatjuk a ByRef kulcsszót is, ha a paramétert hivatkozás szerint akarjuk átadni. Az Apache OpenOffice Basic nem támogatja ezt a kulcsszót, mert eleve a hivatkozás szerinti átadás az alapértelmezett módszer az Apache OpenOffice Basicben.

Opcionális paraméterek

A függvények és eljárások csak akkor hívhatók meg, ha minden szükséges paraméter átadásra kerül a hívás során.

Az Apache OpenOffice Basicben definiálhatók opcionális paraméterek is, amelyek ha nincsenek megadva a meghíváskor, akkor azApache OpenOffice Basic üres paramétert ad át helyettük. A következő példában az A paramétert kötelező megadni, viszont a B paraméter opcionális.

Sub Teszt(A As Integer, Optional B As Integer)
  ' ...
End Sub

Az IsMissing függvénnyel ellenőrizhető, hogy egy paraméter megvan-e adva vagy nincs.

Sub Teszt(A As Integer, Optional B As Integer)
  Dim B_Local As Integer
  ' Ellenőrzi, hogy a B paraméter meg van-e adva.                  
  If Not IsMissing (B) Then      
    B_Local = B      ' A B paraméter meg van adva.
  Else 
    B_Local = 0      ' A B paraméter nincs megadva -> alapértelmezett érték: 0
  End If
  ' ... A tényleges függvény kezdete
End Sub

A példaprogram először ellenőrzi, hogy a B paraméter meg van-e adva, és ha igen, az értékét hozzárendeli a B_Local változóhoz. Ha egy adott paraméter nincs megadva, akkor egy alapértelmezett értéket (ebben a példában a 0-t) kap a B_Local változó az átadott paraméter helyett.

Documentation note.png A VBA-ban rendelkezésre álló ParamArray kulcsszó nem támogatott az Apache OpenOffice Basicben.

Rekurzió

A rekurzív eljárás vagy függvény saját magát hívja meg egészen addig, amíg egy alapfeltétel igazzá nem válik. Ha a függvényt ezzel az alapfeltétellel hívják meg, egy eredményt ad vissza.

A következő példa bemutat egy rekurzív függvényt, amely kiszámolja a 42, -42 és a 3.14 faktoriálisát:

Sub Main
  Msgbox CalculateFactorial(  42 )    ' Az 1,40500611775288E+51 értéket jeleníti meg
  Msgbox CalculateFactorial( -42 )    ' Az "Érvénytelen szám faktoriálisszámításhoz!" üzenetet jeleníti meg.
  Msgbox CalculateFactorial( 3,14 )    ' Az "Érvénytelen szám faktoriálisszámításhoz!" üzenetet jeleníti meg.
End Sub 
 
Function CalculateFactorial( Number )
  If Number < 0 Or Number <> Int( Number ) Then
    CalculateFactorial = "Érvénytelen szám faktoriálisszámításhoz!"
  ElseIf Number = 0 Then
    CalculateFactorial = 1
  Else 
    ' Ez a rekurzív függvényhívás:
    CalculateFactorial = Number * CalculateFactorial( Number - 1 )
  Endif
End Function

A példaprogram visszaadja 42 faktoriálisát azzal, hogy rekurzívan meghívja a CalculateFactorial függvényt addig, amíg az el nem éri a 0! = 1 alapfeltételt.

Documentation note.png A használható rekurzív szintek száma a szoftverplatformtól függ. Windowsban a rekurzivitás szintje 5800. Solarisban és Linuxban ez a veremmérettől függ.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools