Difference between revisions of "NL/Documentation/BASIC Guide/Procedures and Functions"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Terminating Procedures and Functions Prematurely)
m (Recursie)
 
(6 intermediate revisions by 2 users not shown)
Line 14: Line 14:
 
Een '''procedure''' voert een actie uit zonder een expliciete waarde te verschaffen. Zijn syntaxis is
 
Een '''procedure''' voert een actie uit zonder een expliciete waarde te verschaffen. Zijn syntaxis is
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Sub Test
 
Sub Test
 
   ' ... hier staat de actuele code van de procedure
 
   ' ... hier staat de actuele code van de procedure
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
 
Het voorbeeld definieert een procedure genaamd <tt>Test</tt> 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:
 
Het voorbeeld definieert een procedure genaamd <tt>Test</tt> 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:
Line 26: Line 26:
 
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.
 
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.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Function Test
 
Function Test
 
   ' ... hier staat de actuele code van de functie
 
   ' ... hier staat de actuele code van de functie
 
   Test = 123
 
   Test = 123
 
End Function  
 
End Function  
</source>
+
</syntaxhighlight>
  
 
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 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.
Line 37: Line 37:
 
De voorgaande functie kan als volgt worden aangeroepen binnen het programma:
 
De voorgaande functie kan als volgt worden aangeroepen binnen het programma:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim A
 
Dim A
 
A = Test
 
A = Test
</source>
+
</syntaxhighlight>
  
 
De code definieert een variabele <tt>A</tt> en wijst daar het resultaat van de functie <tt>Test</tt> aan toe.
 
De code definieert een variabele <tt>A</tt> en wijst daar het resultaat van de functie <tt>Test</tt> aan toe.
Line 46: Line 46:
 
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.
 
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.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Function Test
 
Function Test
 
   Test = 12
 
   Test = 12
Line 52: Line 52:
 
   Test = 123
 
   Test = 123
 
End Function  
 
End Function  
</source>
+
</syntaxhighlight>
  
 
In dit voorbeeld is de retourwaarde van de functie 123.
 
In dit voorbeeld is de retourwaarde van de functie 123.
Line 61: Line 61:
 
De retourwaarde van een functie kan elk type zijn. Het type wordt gedeclareerd op dezelfde manier als een declaratie van een variabele:
 
De retourwaarde van een functie kan elk type zijn. Het type wordt gedeclareerd op dezelfde manier als een declaratie van een variabele:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Function Test As Integer
 
Function Test As Integer
 
   ' ... hier staat de actuele code van de functie
 
   ' ... hier staat de actuele code van de functie
 
End Function  
 
End Function  
</source>
+
</syntaxhighlight>
 
Als het type retourwaarde niet is gespecificeerd (zie het eerste voorbeeld van deze pagina), geeft de functie een variant terug.
 
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 ==
 
== Voortijdig beëindigen van procedures en functies ==
  
In {{OOo}} BASIC, kunt u de opdrachten <tt>Exit Sub</tt> en <tt>Exit Function</tt> 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.
+
In {{AOo}} BASIC, kunt u de opdrachten <tt>Exit Sub</tt> en <tt>Exit Function</tt> 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 <tt>ErrorOccured</tt> de waarde <tt>True</tt> heeft.
 
Het volgende voorbeeld toont een procedure die verder uitvoering beëindigt als de  variabele <tt>ErrorOccured</tt> de waarde <tt>True</tt> heeft.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Sub Test
 
Sub Test
 
   Dim ErrorOccured As Boolean
 
   Dim ErrorOccured As Boolean
Line 83: Line 83:
 
   ' ...
 
   ' ...
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
== Passing Parameters ==
+
== Doorgeven van parameters ==
  
Functions and procedures can receive one or more parameters. Essential parameters must be enclosed in parentheses after the function or procedure names. The following example defines a procedure that expects an integer value <tt>A</tt> and a string <tt>B</tt> as 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">
+
<syntaxhighlight lang="oobas">
 
Sub Test (A As Integer, B As String)
 
Sub Test (A As Integer, B As String)
   ' ...
+
   '
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
Parameters are normally [http://en.wikipedia.org/wiki/Pass_by_reference#Call_by_reference passed by '''Reference'''] in {{OOo}} Basic. Changes made to the variables are retained when the procedure or function is exited:
+
Parameters worden normaal gesproken in {{AOo}} Basic [https://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">
+
<syntaxhighlight lang="oobas">
 
Sub Test  
 
Sub Test  
 
   Dim A As Integer
 
   Dim A As Integer
 
   A = 10
 
   A = 10
   ChangeValue(A)
+
   WijzigWaarde(A)
   ' The parameter A now has the value 20
+
   ' De parameter A heeft nu de waarde 20
 
End Sub
 
End Sub
  
Sub ChangeValue(TheValue As Integer)
+
Sub WijzigWaarde(DeWaarde As Integer)
   TheValue = 20
+
   DeWaarde = 20
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
In this example, the value <tt>A</tt> that is defined in the <tt>Test</tt> function is passed as a parameter to the <tt>ChangeValue</tt> function. The value is then changed to 20 and passed to <tt>TheValue</tt>, which is retained when the function is exited.
+
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.
  
You can also pass a parameter as a '''value''' if you do not want subsequent changes to the parameter to affect the value that is originally passed. To specify that a parameter is to be passed as a value, ensure that the <tt>ByVal</tt> keyword precedes the variable declaration in the function header.
+
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 the preceding example, if we replace the <tt>ChangeValue</tt> function then the superordinate variable A remains unaffected by this change. After the call for the <tt>ChangeValue</tt> function, variable <tt>A</tt> retains the value 10.
+
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">
+
<syntaxhighlight lang="oobas">
Sub ChangeValue(ByVal TheValue As Integer)
+
Sub WijzigWaarde(ByVal DeWaarde As Integer)
   TheValue = 20
+
   DeWaarde = 20
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
{{Documentation/VBAnote|The method for passing parameters to procedures and functions in {{OOo}} Basic is virtually identical to that in VBA. By default, the parameters are passed by reference. To pass parameters as values, use the <tt>ByVal</tt> keyword. In VBA, you can also use the keyword <tt>ByRef</tt> to force a parameter to be passed by reference. {{OOo}} Basic recognizes but ignores this keyword, because this is already the default procedure in {{OOo}} Basic.}}
+
{{Documentation/VBAnote|De methode voor het doorgeven van parameters aan procedures en functies in {{AOo}} 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. {{AOo}} BASIC herkent maar negeert dit sleutelwoord, omdat het al de standaardprocedure is in {{AOo}} BASIC.}}
  
== Optional Parameters ==
+
== Optionele parameters ==
  
Functions and procedures can only be called up if all the necessary parameters are passed during the call.  
+
Functies en procedures kunnen alleen worden aangeroepen als alle benodigde parameters worden doorgegeven bij het aanroepen.
  
{{OOo}} Basic lets you define parameters as '''optional''', that is, if the corresponding values are not included in a call, {{OOo}} Basic passes an empty parameter. In the following example the <tt>A</tt> parameter is obligatory, whereas the <tt>B</tt> parameter is optional.  
+
{{AOo}} BASIC laat u parameters definiëren als '''optional''', dat betekent dat als de corresponderende waarden niet zijn opgenomen in een aanroep, {{AOo}} BASIC een lege parameter doorgeeft. In het volgende voorbeeld is de parameter <tt>A</tt> verplicht, terwijl de parameter <tt>B</tt> optioneel is.  
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Sub Test(A As Integer, Optional B As Integer)
 
Sub Test(A As Integer, Optional B As Integer)
 
   ' ...
 
   ' ...
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
The <tt>IsMissing</tt> function checks whether a parameter has been passed or is left out.  
+
De functie <tt>IsMissing</tt> controleert of een parameter is doorgegeven of is weggelaten.  
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Sub Test(A As Integer, Optional B As Integer)
 
Sub Test(A As Integer, Optional B As Integer)
 
   Dim B_Local As Integer
 
   Dim B_Local As Integer
   ' Check whether B parameter is actually present          
+
   ' Controleer of de parameter B ook echt aanwezig is         
 
   If Not IsMissing (B) Then   
 
   If Not IsMissing (B) Then   
     B_Local = B      ' B parameter present
+
     B_Local = B      ' parameter B aanwezig
 
   Else
 
   Else
     B_Local = 0      ' B parameter missing -> default value 0
+
     B_Local = 0      ' parameter B ontbreekt -> standaardwaarde 0
 
   End If
 
   End If
   ' ... Start the actual function
+
   ' ... Begint de eigenlijke functie
 
End Sub
 
End Sub
</source>
+
</syntaxhighlight>
  
The example first tests whether the <tt>B</tt> parameter has been passed and, if necessary, passes the same parameter to the internal <tt>B_Local</tt> variable. If the corresponding parameter is not present, then a default value (in this instance, the value 0) is passed to <tt>B_Local</tt> rather than the passed parameter.
+
Het voorbeeld test eerst of de parameter <tt>B</tt> is opgegeven en, indien nodig, geeft hij dezelfde parameter door aan de interne variabele <tt>B_Local</tt>. Als de corresponderende parameter niet aanwezig is, dan wordt de standaardwaarde (in dit geval de waarde 0) doorgegeven aan <tt>B_Local</tt> in plaats van de opgegeven parameter.
  
{{Documentation/VBAnote|The <tt>ParamArray</tt> keyword present in VBA is not supported in {{OOo}} Basic.}}
+
{{Documentation/VBAnote|Het in VBA aanwezige sleutelwoord <tt>ParamArray</tt> wordt niet ondersteund in {{OOo}} Basic.}}
  
== Recursion ==
+
== Recursie ==
  
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.  
+
Een recursieve procedure of functie is er een die de mogelijkheid heeft om zichzelf aan te roepen totdat hij ontdekt dat aan een basisvoorwaarde wordt voldaan. Wanneer de functie wordt aangeroepen met de basisvoorwaarde, wordt een resultaat teruggegeven.  
  
The following example uses a recursive function to calculate the factorial of the numbers <tt>42</tt>, <tt>-42</tt>, and <tt>3.14</tt>:
+
Het volgende voorbeeld gebruikt een recursieve functie om de faculteit van de getallen <tt>42</tt>, <tt>-42</tt> en <tt>3.14</tt> te berekenen:
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Sub Main
 
Sub Main
   Msgbox CalculateFactorial(  42 )    ' Displays 1,40500611775288E+51
+
   Msgbox BerekenFaculteit(  42 )    ' geeft weer 1,40500611775288E+51
   Msgbox CalculateFactorial( -42 )    ' Displays "Invalid number for factorial!"
+
   Msgbox BerekenFaculteit( -42 )    ' geeft weer "Ongeldig getal voor faculteit!"
   Msgbox CalculateFactorial( 3.14 )  ' Displays "Invalid number for factorial!"
+
   Msgbox BerekenFaculteit( 3.14 )  ' geeft weer "Ongeldig getal voor faculteit!"
 
End Sub  
 
End Sub  
  
Function CalculateFactorial( Number )
+
Function BerekenFaculteit( Getal )
   If Number < 0 Or Number <> Int( Number ) Then
+
   If Getal < 0 Or Getal <> Int( Getal ) Then
     CalculateFactorial = "Invalid number for factorial!"
+
     BerekenFaculteit = "Ongeldig getal voor faculteit!"
   ElseIf Number = 0 Then
+
   ElseIf Getal = 0 Then
     CalculateFactorial = 1
+
     BerekenFaculteit = 1
 
   Else
 
   Else
     ' This is the recursive call:
+
     ' Dit is de recursieve aanroep:
     CalculateFactorial = Number * CalculateFactorial( Number - 1 )
+
     BerekenFaculteit = Getal * CalculateFactorial( Getal - 1 )
 
   Endif
 
   Endif
 
End Function  
 
End Function  
</source>
+
</syntaxhighlight>
  
The example returns the factorial of the number <tt>42</tt> by recursively calling the <tt>CalculateFactorial</tt> function until it reaches the base condition of <tt>0! = 1</tt>.
+
Het voorbeeld geeft de faculteit van het getal <tt>42</tt> terug door recursief de functie <tt>BerekenFaculteit</tt> aan te roepen totdat die de basisvoorwaarde <tt>0! = 1</tt> bereikt.
  
{{Documentation/Note|The recursion levels are set at different levels based on the software platform. For Windows the recursion level is 5800. For Solaris and Linux, an evaluation of the stacksize is performed and the recursion level is calculated.}}
+
{{Note|De niveaus voor recursie zijn ingesteld op verschillende niveaus, gebaseerd op het platform voor de software. Voor Windows is het niveau voor recursie 5800. Voor Solaris en Linux wordt een evaluatie van de grootte van de stapel uitgevoerd en wordt het niveau voor recursie berekend.}}
  
 
   
 
   
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Procedures and Functions}}
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Procedures and Functions}}
 
{{PDL1}}
 
{{PDL1}}

Latest revision as of 14:51, 26 August 2022

Book.png


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 WijzigWaarde(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
Documentation note.png VBA : De methode voor het doorgeven van parameters aan procedures en functies in Apache OpenOffice BASIC is virtueel identiek aan die in VBA. Standaard worden de parameters doorgegeven als verwijzing. Gebruik het sleutelwoord ByVal om parameters door te geven als waarden. In VBA kunt u ook het sleutelwoord ByRef gebruiken om te forceren dat een parameter wordt doorgegeven als een verwijzing. Apache OpenOffice BASIC herkent maar negeert dit sleutelwoord, omdat het al de standaardprocedure is in Apache OpenOffice BASIC.


Optionele parameters

Functies en procedures kunnen alleen worden aangeroepen als alle benodigde parameters worden doorgegeven bij het aanroepen.

Apache OpenOffice BASIC laat u parameters definiëren als optional, dat betekent dat als de corresponderende waarden niet zijn opgenomen in een aanroep, Apache OpenOffice BASIC een lege parameter doorgeeft. In het volgende voorbeeld is de parameter A verplicht, terwijl de parameter B optioneel is.

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

De functie IsMissing controleert of een parameter is doorgegeven of is weggelaten.

Sub Test(A As Integer, Optional B As Integer)
  Dim B_Local As Integer
  ' Controleer of de parameter B ook echt aanwezig is         
  If Not IsMissing (B) Then   
    B_Local = B      ' parameter B aanwezig
  Else
    B_Local = 0      ' parameter B ontbreekt -> standaardwaarde 0
  End If
  ' ... Begint de eigenlijke functie
End Sub

Het voorbeeld test eerst of de parameter B is opgegeven en, indien nodig, geeft hij dezelfde parameter door aan de interne variabele B_Local. Als de corresponderende parameter niet aanwezig is, dan wordt de standaardwaarde (in dit geval de waarde 0) doorgegeven aan B_Local in plaats van de opgegeven parameter.

Documentation note.png VBA : Het in VBA aanwezige sleutelwoord ParamArray wordt niet ondersteund in Apache OpenOffice Basic.


Recursie

Een recursieve procedure of functie is er een die de mogelijkheid heeft om zichzelf aan te roepen totdat hij ontdekt dat aan een basisvoorwaarde wordt voldaan. Wanneer de functie wordt aangeroepen met de basisvoorwaarde, wordt een resultaat teruggegeven.

Het volgende voorbeeld gebruikt een recursieve functie om de faculteit van de getallen 42, -42 en 3.14 te berekenen:

Sub Main
  Msgbox BerekenFaculteit(  42 )    ' geeft weer 1,40500611775288E+51
  Msgbox BerekenFaculteit( -42 )    ' geeft weer "Ongeldig getal voor faculteit!"
  Msgbox BerekenFaculteit( 3.14 )   ' geeft weer "Ongeldig getal voor faculteit!"
End Sub 
 
Function BerekenFaculteit( Getal )
  If Getal < 0 Or Getal <> Int( Getal ) Then
    BerekenFaculteit = "Ongeldig getal voor faculteit!"
  ElseIf Getal = 0 Then
    BerekenFaculteit = 1
  Else
    ' Dit is de recursieve aanroep:
    BerekenFaculteit = Getal * CalculateFactorial( Getal - 1 )
  Endif
End Function

Het voorbeeld geeft de faculteit van het getal 42 terug door recursief de functie BerekenFaculteit aan te roepen totdat die de basisvoorwaarde 0! = 1 bereikt.

Documentation note.png De niveaus voor recursie zijn ingesteld op verschillende niveaus, gebaseerd op het platform voor de software. Voor Windows is het niveau voor recursie 5800. Voor Solaris en Linux wordt een evaluatie van de grootte van de stapel uitgevoerd en wordt het niveau voor recursie berekend.


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