Difference between revisions of "NL/Documentation/BASIC Guide/Procedures and Functions"
(→Terminating Procedures and Functions Prematurely) |
(→Passing Parameters) |
||
Line 85: | Line 85: | ||
</source> | </source> | ||
− | == | + | == Doorgeven van parameters == |
− | + | Functies en procedures kunnen één of meer parameters ontvangen. Essentiële parameters moeten worden omsloten door haken na de functie- of procedurenaam. Het volgende voorbeeld definieert een procedure die een Integer-waarde <tt>A</tt> en een tekenreeks <tt>B</tt> als parameters verwacht. | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 95: | Line 95: | ||
</source> | </source> | ||
− | Parameters | + | Parameters worden normaal gesproken in {{OOo}} Basic [http://en.wikipedia.org/wiki/Pass_by_reference#Call_by_reference doorgegeven als '''verwijzing''']. Veranderingen, gemaakt in de variabelen, worden behouden als de procedure of functie wordt verlaten: |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 101: | Line 101: | ||
Dim A As Integer | Dim A As Integer | ||
A = 10 | A = 10 | ||
− | + | WijzigWaarde(A) | |
− | ' | + | ' De parameter A heeft nu de waarde 20 |
End Sub | End Sub | ||
− | Sub | + | Sub WijizgWaarde(DeWaarde As Integer) |
− | + | DeWaarde = 20 | |
End Sub | End Sub | ||
</source> | </source> | ||
− | In | + | In dit voorbeeld wordt de waarde <tt>A</tt>, die is gedefinieerd in de functie <tt>Test</tt>, doorgegeven als een parameter aan de functie <tt>WijzigWaarde</tt>. De waarde wordt dan veranderd naar 20 en doorgegeven aan <tt>DeWaarde</tt>, die wordt behouden als de functie wordt verlaten. |
− | + | U kunt ook een parameter doorgeven als een '''waarde''' als u niet wilt dat opvolgende veranderingen in de parameter de oorspronkelijke waarde beïnvloeden. Zorg er voor dat het sleutelwoord <tt>ByVal</tt> voorafgaat aan de declaratie van de variabele in de kop van de functie om te specificeren dat een parameter moet worden doorgegeven als een waarde. | |
− | In | + | In het voorgaande voorbeeld zal, als we de functie <tt>WijzigWaarde</tt> vervangen, de bovenliggende variabele A niet beïnvloed worden door deze wijziging. Na de aanroep voor de functie <tt>WijzigWaarde</tt> behoudt de variabele <tt>A</tt> de waarde 10. |
<source lang="oobas"> | <source lang="oobas"> | ||
− | Sub | + | Sub WijzigWaarde(ByVal DeWaarde As Integer) |
− | + | DeWaarde = 20 | |
End Sub | End Sub | ||
</source> | </source> | ||
− | {{Documentation/VBAnote| | + | {{Documentation/VBAnote|De methode voor het doorgeven van parameters aan procedures en functies in {{OOo}} BASIC is virtueel identiek aan die in VBA. Standaard worden de parameters doorgegeven als verwijzing. Gebruik het sleutelwoord <tt>ByVal</tt> om parameters door te geven als waarden. In VBA kunt u ook het sleutelwoord <tt>ByRef</tt> gebruiken om te forceren dat een parameter wordt doorgegeven als een verwijzing. {{OOo}} BASIC herkent maar negeert dit sleutelwoord, omdat het al de standaardprocedure is in {{OOo}} BASIC.}} |
== Optional Parameters == | == Optional Parameters == |
Revision as of 17:59, 21 January 2013
Procedures en functies vormen belangrijke punten in de structuur van een programma. Zij verschaffen het raamwerk om een complex probleem op te delen in verschillende sub-taken.
Procedures
Een procedure voert een actie uit zonder een expliciete waarde te verschaffen. Zijn syntaxis is
Sub Test ' ... hier staat de actuele code van de procedure End Sub
Het voorbeeld definieert een procedure genaamd Test die code bevat die kan worden benaderd vanaf elk punt in het programma. De aanroep wordt gemaakt door de procedurenaam op de relevante plaats in het programma in te voeren:
Functies
Een function, net als een procedure, combineert een blok programma's om te worden uitgevoerd in één logische eenheid. Echter, anders dan een procedure, verschaft een functie een retourwaarde.
Function Test ' ... hier staat de actuele code van de functie Test = 123 End Function
De retourwaarde wordt toegewezen via een eenvoudige toewijzing. De toewijzing hoeft niet te worden geplaatst aan het einde van de functie, maar kan op elke plaats in de functie worden gemaakt.
De voorgaande functie kan als volgt worden aangeroepen binnen het programma:
Dim A A = Test
De code definieert een variabele A en wijst daar het resultaat van de functie Test aan toe.
De retourwaarde kan binnen de functie meerdere malen worden overschreven. Zoals met klassieke toewijzing van variabelen, geeft de functie in dit voorbeeld de waarde weer die daaraan het laatste was toegekend.
Function Test Test = 12 ' ... Test = 123 End Function
In dit voorbeeld is de retourwaarde van de functie 123.
Als een toewijzing is gestopt, geeft de functie een waarde nul weer (getal 0 voor numerieke waarden en een blanco voor tekenreeksen).
De retourwaarde van een functie kan elk type zijn. Het type wordt gedeclareerd op dezelfde manier als een declaratie van een variabele:
Function Test As Integer ' ... hier staat de actuele code van de functie End Function
Als het type retourwaarde niet is gespecificeerd (zie het eerste voorbeeld van deze pagina), geeft de functie een variant terug.
Voortijdig beëindigen van procedures en functies
In Apache OpenOffice BASIC, kunt u de opdrachten Exit Sub en Exit Function gebruiken om een procedure of functie voortijdig te beëindigen, bijvoorbeeld voor foutafhandeling. Deze opdrachten stoppen de procedure of functie en laten het programma terugkeren naar het punt waarop de procedure en/of functie werd aangeroepen.
Het volgende voorbeeld toont een procedure die verder uitvoering beëindigt als de variabele ErrorOccured de waarde True heeft.
Sub Test Dim ErrorOccured As Boolean ' ... If ErrorOccured Then Exit Sub End If ' ... End Sub
Doorgeven van parameters
Functies en procedures kunnen één of meer parameters ontvangen. Essentiële parameters moeten worden omsloten door haken na de functie- of procedurenaam. Het volgende voorbeeld definieert een procedure die een Integer-waarde A en een tekenreeks B als parameters verwacht.
Sub Test (A As Integer, B As String) ' ... End Sub
Parameters worden normaal gesproken in Apache OpenOffice Basic doorgegeven als verwijzing. Veranderingen, gemaakt in de variabelen, worden behouden als de procedure of functie wordt verlaten:
Sub Test Dim A As Integer A = 10 WijzigWaarde(A) ' De parameter A heeft nu de waarde 20 End Sub Sub WijizgWaarde(DeWaarde As Integer) DeWaarde = 20 End Sub
In dit voorbeeld wordt de waarde A, die is gedefinieerd in de functie Test, doorgegeven als een parameter aan de functie WijzigWaarde. De waarde wordt dan veranderd naar 20 en doorgegeven aan DeWaarde, die wordt behouden als de functie wordt verlaten.
U kunt ook een parameter doorgeven als een waarde als u niet wilt dat opvolgende veranderingen in de parameter de oorspronkelijke waarde beïnvloeden. Zorg er voor dat het sleutelwoord ByVal voorafgaat aan de declaratie van de variabele in de kop van de functie om te specificeren dat een parameter moet worden doorgegeven als een waarde.
In het voorgaande voorbeeld zal, als we de functie WijzigWaarde vervangen, de bovenliggende variabele A niet beïnvloed worden door deze wijziging. Na de aanroep voor de functie WijzigWaarde behoudt de variabele A de waarde 10.
Sub WijzigWaarde(ByVal DeWaarde As Integer) DeWaarde = 20 End Sub
Optional Parameters
Functions and procedures can only be called up if all the necessary parameters are passed during the call.
Apache OpenOffice Basic lets you define parameters as optional, that is, if the corresponding values are not included in a call, Apache OpenOffice Basic passes an empty parameter. In the following example the A parameter is obligatory, whereas the B parameter is optional.
Sub Test(A As Integer, Optional B As Integer) ' ... End Sub
The IsMissing function checks whether a parameter has been passed or is left out.
Sub Test(A As Integer, Optional B As Integer) Dim B_Local As Integer ' Check whether B parameter is actually present If Not IsMissing (B) Then B_Local = B ' B parameter present Else B_Local = 0 ' B parameter missing -> default value 0 End If ' ... Start the actual function End Sub
The example first tests whether the B parameter has been passed and, if necessary, passes the same parameter to the internal B_Local variable. If the corresponding parameter is not present, then a default value (in this instance, the value 0) is passed to B_Local rather than the passed parameter.
Recursion
A recursive procedure or function is one that has the ability to call itself until it detects that some base condition has been satisfied. When the function is called with the base condition, a result is returned.
The following example uses a recursive function to calculate the factorial of the numbers 42, -42, and 3.14:
Sub Main Msgbox CalculateFactorial( 42 ) ' Displays 1,40500611775288E+51 Msgbox CalculateFactorial( -42 ) ' Displays "Invalid number for factorial!" Msgbox CalculateFactorial( 3.14 ) ' Displays "Invalid number for factorial!" End Sub Function CalculateFactorial( Number ) If Number < 0 Or Number <> Int( Number ) Then CalculateFactorial = "Invalid number for factorial!" ElseIf Number = 0 Then CalculateFactorial = 1 Else ' This is the recursive call: CalculateFactorial = Number * CalculateFactorial( Number - 1 ) Endif End Function
The example returns the factorial of the number 42 by recursively calling the CalculateFactorial function until it reaches the base condition of 0! = 1.
Content on this page is licensed under the Public Documentation License (PDL). |