Procédures et fonctions

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


Les procédures et les fonctions sont les éléments centraux de la structure d'un programme. Elles forment le cadre permettant de diviser un problème complexe en différentes sous-tâches.

Procédures

Une procédure exécute une action sans fournir de valeur explicite. Sa syntaxe est la suivante :

Sub Test
  ' ... here is the actual code of the procedure
End Sub

L'exemple suivant définit une procédure appelée Test qui contient du code accessible depuis tout point du programme. L'appel s'effectue en insérant le nom de la procédure à l'endroit adapté du programme.

Fonctions

Une fonction, tout comme une procédure, regroupe un bloc d'instructions à exécuter en une unité logique. Cependant, contrairement à une procédure, une fonction retourne une valeur.

Function Test
  ' ... here is the actual code of the function
  Test = 123
End Function

La valeur de retour est assignée par une simple affectation. Il n'est pas nécessaire que l'assignation soit placée à la fin de la fonction ; elle peut au contraire se trouver n'importe où à l'intérieur de celle-ci.

La fonction précédente peut être appelée à l'intérieur du programme de la façon suivante :

Dim A
A = Test

Ce code définit une variable A et lui assigne le résultat de la fonction Test.

La valeur de retour peut être écrasée plusieurs fois à l'intérieur de la fonction. Comme dans le cas d'une assignation de variable classique, la fonction de cet exemple retourne la valeur qui lui a été assignée en dernier.

Function Test
  Test = 12
  ' ... 
  Test = 123
End Function

Dans cet exemple, la valeur de retour de la fonction est 123.

Si aucune valeur n'est assignée à la fonction, elle retourne la valeur zero (le nombre 0 pour les valeurs numériques et une chaîne vide pour les chaînes de caractères).

La valeur de retour d'une fonction peut être de tout type. La déclaration du type s'effectue de la même manière que pour une variable :

Function Test As Integer
  ' ... here is the actual code of the function
End Function

Interruption prématurée d'une procédure ou d'une fonction

Dans Apache OpenOffice Basic, vous pouvez mettre fin à une procédure ou à une fonction prématurément à l'aide des commandes Exit Sub et Exit Function, par exemple pour traiter les erreurs. Une telle commande interrompt la procédure ou la fonction et revient au programme principal, à l'endroit d'où elle avait été appelée.

La procédure de l'exemple suivant s'interrompt lorsque la variable ErrorOccured est définie sur la valeur True.

Sub Test
  Dim ErrorOccured As Boolean
  ' ...
  If ErrorOccured Then
    Exit Sub
  End If
  ' ...
End Sub

Passage de paramètres

Les fonctions et les procédures peuvent recevoir un ou plusieurs paramètres. Les paramètres essentiels doivent être indiqués entre parenthèses après le nom de la fonction ou de la procédure. L'exemple suivant définit une procédure qui attend en paramètre une valeur entière A et une chaîne B.

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

Les paramètres sont normalement passés par référence dans Apache OpenOffice Basic. Les modifications apportées aux variables sont conservées lorsque la procédure ou la fonction se termine :

Sub Test 
  Dim A As Integer
  A = 10
  ChangeValue(A)
  ' The parameter A now has the value 20
End Sub
 
Sub ChangeValue(TheValue As Integer)
  TheValue = 20
End Sub

Dans cet exemple, la variable A définie dans la fonction Test est passée en paramètre à la fonction ChangeValue. Dans la fonction, A prend la valeur 20 qui est passée à la variable TheValue, elle-même conservée lorsque la fonction se termine.

Vous pouvez également passer un paramètre par valeur si vous ne souhaitez pas que les modifications effectuées par la suite sur le paramètre affectent sa valeur d'origine. Pour qu'un paramètre soit passé par valeur, le mot-clé ByVal doit précéder la déclaration de la variable dans l'en-tête de la fonction.

Dans l'exemple précédent, si la fonction ChangeValue est remplacée, alors la variable de niveau supérieur A n'est pas affectée par cette modification. Après l'appel de la fonction ChangeValue, la variable A conserve la valeur 10.

Sub ChangeValue(ByVal TheValue As Integer)
  TheValue = 20
End Sub
Documentation note.png Pour passer les paramètres aux procédures et aux fonctions de Apache OpenOffice Basic, la méthode est identique à celle de VBA. Par défaut, les paramètres sont passés par référence. Pour passer des paramètres par valeur, utilisez le mot-clé ByVal. Dans VBA, vous pouvez également forcer un paramètre à être passé par référence à l'aide du mot-clé ByRef. Apache OpenOffice Basic reconnaît ce mot-clé mais l'ignore, car les paramètres sont passés par référence par défaut dans Apache OpenOffice Basic.

Paramètres facultatifs

Normalement, tous les paramètres d'une fonction ou d'une procédure doivent être passés lors de l'appel à cette fonction ou procédure.


                   Cependant, dans Apache OpenOffice Basic, vous pouvez indiquer que certains paramètres sont facultatifs. Dans ce cas, si les valeurs correspondantes ne sont pas incluses dans l'appel, Apache OpenOffice Basic passe un paramètre vide. Dans l'exemple suivant, le paramètre A est obligatoire, tandis que le paramètre B est facultatif. 
Sub Test(A As Integer, Optional B As Integer)
  ' ...
End Sub

La fonction IsMissing permet de déterminer si un paramètre a bien été passé.

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

L'exemple commence par tester si le paramètre B a bien été passé et, le cas échéant, passe le même paramètre à la variable interne B_Local. Si le paramètre correspondant n'est pas défini, la variable B_Local reçoit à la place la valeur par défaut (en l'occurrence la valeur 0).

Documentation note.png Le mot-clé ParamArray proposé par VBA n'est pas pris en charge dans Apache OpenOffice Basic.

Récursivité

Une procédure ou une fonction récursive a la possibilité de s'appeler elle-même jusqu'à ce qu'une condition de base soit remplie. Lorsque la fonction est appelée avec cette condition de base, elle retourne un résultat.

L'exemple suivant calcule la factorielle des nombres 42, -42 et 3.14 à l'aide d'une fonction récursive :

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

L'exemple retourne la factorielle du nombre 42 en appelant de façon récursive la fonction CalculateFactorial jusqu'à atteindre la condition 0! = 1.

Documentation note.png Les niveaux de récursivité sont définis à différents niveaux selon la plate-forme utilisée. Sous Windows, le niveau de récursivité est 5800. Sous Solaris et Linux, le niveau de récursivité est calculé en fonction d'une évaluation de la taille de la pile.
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools