Procedures
DescriptionProcedure[.<type>] nom(<variable1[.<type>]> [, <variable2[.<type>]>, ...]) ... [ProcedureReturn valeur] EndProcedure
Une procédure est une partie du code indépendante du programme principal qui peut avoir des paramètres et ses propres variables. En PureBasic, les procédures sont récursives et peuvent donc s'appeler elles-mêmes. Lors de chaque appel à la procédure, les variables locales sont automatiquement initialisées avec la valeur 0. Pour accéder aux variables du programme principal, ils faut les partager en utilisant les mots clefs Shared ou Global (voir aussi: Protected et Static).
Les paramètres en fin de procédure peuvent avoir une valeur par défaut (une expression constante est requise). Les paramètres ayant une valeur par défaut pourront être omis lors de l'appel de la procédure, la valeur par défaut de chaque paramètre manquant sera utilisée.
Une procédure peut également recevoir en paramètre des listes chaînées, des maps et des tableaux à l'aide des mot-clefs List, Map et Array (Pour les tableaux vous devrez indiquer le nombre de dimensions, voir l'exemple ci-dessous).
Une procédure peut avoir une valeur de retour si nécessaire. Il faut en définir le type après Procedure et utiliser le mot clef ProcedureReturn à tout moment opportun dans la procédure. ProcedureReturn permet de sortir immédiatement d'une procédure, même si l'appel est placé à l'intérieur d'une boucle.
ProcedureReturn ne peut pas être utilisé pour renvoyer un tableau, une liste chaînée ou une map.
Si aucune valeur n'est spécifiée pour ProcedureReturn, la valeur renvoyée sera indéterminée (voir assembleur en ligne pour plus d'information).
Note: Pour renvoyer une chaîne de caractères dans une DLL, voir DLLs. Pour les programmeurs chevronnés, ProcedureC est disponible pour déclarer la procédure en utilisant la convention d'appel 'cdecl' au lieu de 'stdcall'.
Les procédures peuvent également être appelées de manière asynchrone en utilisant les threads.Exemple:
Procedure.l Maximum(nb1.l, nb2.l) If nb1>nb2 Resultat.l = nb1 Else Resultat = nb2 EndIf ProcedureReturn Resultat EndProcedure Resultat.l = Maximum(15,30) Debug Resultat EndExemple: Paramètre par défaut
Procedure a(a, b, c=2) Debug c EndProcedure a(10, 12) ; ou a(10, 12, 15)Exemple: Listes chaînées en paramètre
NewList Test.Point() AddElement(Test()) Test()\x = 1 AddElement(Test()) Test()\x = 2 Procedure DebugList(c.l, List ParametreListe.Point()) AddElement(ParametreListe()) ParametreListe()\x = 3 ForEach ParametreListe() MessageRequester("Liste", Str(ParametreListe()\x)) Next EndProcedure DebugList(10, Test())Exemple: Tableau en paramètre
Dim Tableau.Point(10, 15) Tableau(0,0)\x = 1 Tableau(1,0)\x = 2 Procedure TestIt(c.l, Array ParametreTableau.Point(2)) ; Le tableau comporte 2 dimensions ParametreTableau(1, 2)\x = 3 ParametreTableau(2, 2)\x = 4 EndProcedure TestIt(10, Tableau()) MessageRequester("Tableau", Str(Tableau(1, 2)\x))
DescriptionDeclare[.<type>] nom(<variable1[.<type>]> [, <variable2[.<type>]>, ...])
Dans certains cas une procédure peut appeler une autre procédure qui n'a pas été déclarée avant sa propre définition. Ce cas peut se produire et provoquer une erreur de compilation 'Procedure not found'. Declare permet de traiter ce cas particulier en déclarant seulement l'en-tête de la procédure. Il est essentiel que les attributs de la fonction Declare et la déclaration réelle de la procédure soient identiques.Exemple:
Declare Maximum(Valeur1, Valeur2) Procedure Traitement(Valeur) Maximum(10, 2) ; A cet instant Maximum() n'est pas connu du compilateur. EndProcedure Procedure.l Maximum(Valeur1.l, Valeur2.l) If Valeur1>Valeur2 Resultat.l = Valeur1 Else Resultat = Valeur2 EndIf ProcedureReturn Resultat EndProcedure