Passer des tableaux à des méthodes

La syntaxe du langage ObjectPAL interdit l'utilisation de variables de type 'tableau' (Array[] et DynArray[]) dans les arguments des procédures et des méthodes. En fait, cette restriction est seulement syntaxique, car cette fonctionnalité est supportée par le langage ObjectPAL à la condition d'utiliser la notion des ' types de variable personnalisés '.

 

Il est possible de déclarer un nouveau type de variable dans ObjectPAL dans les blocs de déclaration caractérisés par les mots clés : Type et endType.

Exemple de déclaration d'un type de variable pour des tableaux de 'number' :


type
typARNU = array[] number
endType

Il est maintenant possible de déclarer des variables issues de ce nouveau type et de passer ces variables dans les arguments des procédures et méthodes.

 

Remarque : le bloc de déclaration du type de variable doit :

1. soit avoir la portée nécessaire pour être visible depuis la méthode (ou la procédure) l'utilisant comme argument et depuis la méthode (ou la procédure) faisant appel à cette méthode (ou cette procédure) : par exemple, l'utilisation du bloc 'type'/'endType' situé dans l'objet fiche permet d'utiliser le type de variable depuis l'ensemble de la programmation de la fiche.

2. soit être répèté dans les différents objets contenant la programmation utilisant le type de variable : exemple des méthodes placées en bibliothèque et appelées depuis des fiches.

Exemple d'une procédure utilisant le type de variable 'Tableau de Number' : fonction 'moyenne'

(l'ensemble de la programmation est placé dans un script, méthode 'run')


type
typARNU = array[] number
endType

proc Moyenne(const ARNU typARNU) Number
Var
TotalNU ; somme totale des valeurs
Number

NbElementLI, ; nombre d'éléments intervenant dans la moyenne
eltLI ; indice de bloucle
LongInt
EndVar

NbElementLI = ARNU.size()
If NbElementLI = 0 Then
Return blank()
EndIf

TotalNU = 0

For eltLI from 1 To NbElementLI
TotalNU = TotalNU + ARNU[eltLI]
EndFor

Return (TotalNU / number(NbElementLI))

endProc

method run(var eventInfo Event)
var
ARNU typARNU
endVar

ARNU.setSize(5)
ARNU[1] = 10
ARNU[2] = 15.5
ARNU[3] = 18
ARNU[4] = 7
ARNU[5] = 11

msgInfo("Moyenne des 5 valeurs :", strVal(moyenne(ARNU)))

endMethod

Indice constructif : cette mécanique peut permettre de palier à la faiblesse du langage ObjectPAL qui interdit dans la programmation spécifique de définir et d'utiliser des méthodes et des procédures au nombre variable d'arguments; alors que plusieurs méthodes RTL (Run Time Library, méthodes disponibles dans le langage ObjectPAL), telle 'match', offrent cette fonctionnalité très intéressante. Pour mettre en place un équivalent de cette fonctionnalité dans la programmation spécifique, des arguments à base de tableaux dynamiques (dynArray[]) peuvent être utilisés.