- Création d'une procédure
- Sortie d'une procédure
- Compilation d'une procédure (locale ou globale) en fonction d'une condition
- Option "A la fin de l'événement contenant l'appel"
- Renvoi d'un résultat
- Typage de la valeur de retour
- Attributs d'extension
Déclarer une procédure/une fonction En anglais : Declaring a procedure/a function
La déclaration d'une procédure est la même qu'il s'agisse : Important : Il ne faut pas déclarer deux procédures avec le même nom (notamment une procédure globale et une procédure locale). Rappel : En WLangage, il n'existe pas de distinction entre les procédures et les fonctions. Les syntaxes de déclaration et d'utilisation décrites pour les procédures sont les mêmes pour les fonctions. PROCÉDURE Trouve(NomFichier, Clé, Valeur) HLitRecherche(NomFichier, Clé, Valeur) SI HTrouve() = Vrai ALORS RENVOYER Vrai SINON RENVOYER Faux FIN Syntaxe
Déclarer une procédure avec paramètres Masquer les détails
PROCEDURE <Nom de la procédure>(<Paramètres>) [<Attributs d'extension>] [: <Type du retour>] <Code de la procédure>
<PROCEDURE> : Début de déclaration de la procédure.Remarque : Pour des raisons de lisibilité des programmes, le mot-clé PROCEDURE peut être remplacé par le mot-clé FONCTION. <Nom de la procédure> : Nom de la procédure à déclarer. <Paramètres> : Paramètres passés à la procédure. Chaque paramètre est séparé par une virgule. Pour plus de détails sur les paramètres, consultez Paramètres d'une procédure. Si votre procédure ou fonction utilise un élément du projet (fenêtre, page, état, ...), il est possible d'obtenir la liste des éléments voulus dans la complétion. Pour cela, il suffit d'ajouter un attribut d'extension dans la déclaration des paramètres de la fonction ou de la procédure. <Attributs d'extension> : Attributs d'extension permettant de définir des options de gestion de l'éditeur de code. Pour plus de détails sur les attributs d'extension disponibles consultez les remarques. <Type du retour> : Type de la valeur renvoyée par la procédure. Ce type peut correspondre à un type simple (entier, réel, chaîne, ...) ou structuré (structure, objet, ...). Cette information permet de s'assurer que la procédure a toujours le même type de valeur en retour. La valeur renvoyée sera toujours convertie dans le type spécifié. Par exemple, si le type de retour est "Entier", si la valeur renvoyée est une chaîne, la chaîne sera automatiquement convertie en entier. <Code de la procédure> : Code WLangage de la procédure à déclarer.
Déclarer une procédure sans paramètre Masquer les détails
PROCEDURE <Nom de la procédure>() [<Attributs d'extension>] [: <Type du retour>] <Code de la procédure>
<PROCEDURE> : Début de déclaration de la procédure.Remarque : Pour des raisons de lisibilité des programmes, le mot-clé PROCEDURE peut être remplacé par le mot-clé FONCTION. <Nom de la procédure> : Nom de la procédure à déclarer. <Attributs d'extension> : Attributs d'extension permettant de définir des options de gestion de l'éditeur de code. Pour plus de détails sur les attributs d'extension disponibles consultez les remarques. <Type du retour> : Type de la valeur renvoyée par la procédure. Ce type peut correspondre à un type simple (entier, réel, chaîne, ...) ou structuré (structure, objet, etc.). Cette information permet de s'assurer que la procédure a toujours le même type de valeur en retour. La valeur renvoyée sera toujours convertie dans le type spécifié. Par exemple, si le type de retour est "Entier", si la valeur renvoyée est une chaîne, la chaîne sera automatiquement convertie en entier. <Code de la procédure> : Code WLangage de la procédure.
Déclarer une procédure avec paramètres variables Masquer les détails
PROCEDURE <Nom de la procédure>([<Paramètres>, ]*) [<Attributs d'extension>] [: <Type du retour>] <Code de la procédure>
<PROCEDURE> : Début de déclaration de la procédure. Remarque : Pour des raisons de lisibilité des programmes, le mot-clé PROCEDURE peut être remplacé par le mot-clé FONCTION. <Nom de la procédure> : Nom de la procédure à déclarer. <Paramètres> : Paramètres passés à la procédure. Chaque paramètre est séparé par une virgule. Si le nombre de paramètres pouvant être passé à la procédure est variable, il suffit d'utiliser le signe "*". Quelques exemples :- Procédure pouvant recevoir entre 0 et 255 paramètres : Procédure MaProc(*).
- Procédure pouvant recevoir entre 1 et 255 paramètres : Procédure MaProc(Param1, *).
Pour plus de détails sur les paramètres, consultez : <Attributs d'extension> : Attributs d'extension permettant de définir des options de gestion de l'éditeur de code. Pour plus de détails sur les attributs d'extension disponibles consultez les remarques. <Type du retour> : Type de la valeur renvoyée par la procédure. Ce type peut correspondre à un type simple (entier, réel, chaîne, ...) ou structuré (structure, objet, ...). Cette information permet de s'assurer que la procédure a toujours le même type de valeur en retour. La valeur renvoyée sera toujours convertie dans le type spécifié. Par exemple, si le type de retour est "Entier", si la valeur renvoyée est une chaîne, la chaîne sera automatiquement convertie en entier. <Code de la procédure> : Code WLangage de la procédure à déclarer. Remarques Création d'une procédure Pour plus de détails sur la création d'une procédure globale, consultez Procédures globales. Pour forcer la sortie d'une procédure, utilisez le mot-clé RETOUR. Dans la procédure, tous les traitements suivant le mot-clé RETOUR ne sont pas exécutés. Par exemple : PROCÉDURE Calcul(Dividende) SI Dividende = 0 ALORS Erreur("Division par 0 impossible") RETOUR SINON ... FIN Remarques : - Si la procédure renvoie un résultat, utilisez le mot-clé RENVOYER.
- Il n'est pas possible d'utiliser les mot-clés RETOUR et RENVOYER dans le même traitement.
Compilation d'une procédure (locale ou globale) en fonction d'une condition Il est possible de compiler une procédure en fonction d'une condition, grâce à l'instruction COMPILE SI. Pour cela, il est nécessaire de positionner l'instruction COMPILE SI AVANT la déclaration de la procédure. Par exemple :
<COMPILE SI Configuration = "Android">
PROCÉDURE Gestion_Beacon()
<FIN>
Option "A la fin de l'événement contenant l'appel" Les procédures avec l'option "A la fin de l'événement contenant l'appel" appelées depuis une procédure de callback (par exemple procédures utilisées par les fonctions fListeFichier, Evénement, ...) sont exécutées à la fin de chaque appel de la callback. Exemple :
// ----------------- // cas normal // ----------------- Clic de bouton // début du code du clic de bouton Proc1 // début du code de Procédure1 Proc2 // début du code de Procédure2
Appel de Procédure FinEvénément // fin du code de Proc2 // fin du code de Proc1 // fin du code du clic de bouton Exécution de Procédure FinEvénément // ------------------- // cas callback // ------------------- Clic de bouton Proc1 Proc2 utilisation de la fonction fListeFichier Procédure Callback1 // début du code de Procédure Callback1 ProcCallback2 // début du code de Procédure Callback2 Appel de ProcFinEvénément // fin du code de ProcédureCallback2 // fin du code de ProcédureCallback1 Exécution de ProcFinEvénément ProcédureCallback1 // début du code de ProcédureCallback1 ProcédureCallback2 // début du code de ProcédureCallback2 Appel de ProcFinEvénément // fin du code de ProcédureCallback2 // fin du code de ProcédureCallback1 Exécution de ProcFinEvénément Pour retourner le résultat d'une procédure au traitement appelant, utilisez le mot-clé RENVOYER. Ce mot-clé permet de renvoyer : - une valeur,
- plusieurs valeurs.
Par exemple : // Procédure renvoyant une valeur PROCÉDURE Trouve(NomFichier, Clé, Valeur) HLitRecherche(NomFichier, Clé, Valeur) SI HTrouve() = Vrai ALORS RENVOYER Vrai SINON RENVOYER Faux FIN // Procédure renvoyant plusieurs valeurs PROCÉDURE MaProc()  // Traitement RENVOYER (1, 2, 3)   // Code d'appel de la procédure ( x, y, z ) = MaProc() // x vaut 1, y vaut 2, z vaut 3 Conseil : Pour les procédures qui retournent un résultat, il est conseillé d'utiliser le mot-clé FONCTION au lieu de PROCEDURE pour faciliter la lecture du code. Important : Il ne faut pas forcer la sortie d'une procédure qui renvoie un résultat avec le mot-clé RETOUR. En effet, l'appel de la procédure attend un compte-rendu qui ne serait pas retourné en cas de sortie forcée de la procédure. Typage de la valeur de retour Pour indiquer le type de la valeur de retour, il suffit de préciser ce type (précédé du caractère ':') lors de la déclaration de la procédure. Par exemple :PROCÉDURE Calcul() : entier  SI MonExpression = Vrai ALORS RENVOYER "1"  // La chaîne "1" sera convertie en entier SINON RENVOYER 0 FIN Remarque : Cas des valeurs de retour multiples Il est possible de typer les valeurs de retour à une procédure. La syntaxe est la suivante : PROCEDURE NomProcédure() : ([<Type valeur 1>, [<Type valeur 2>, ... , [<Type valeur N>]]]) Remarque : Il n'est pas obligatoire de typer toutes les valeurs de retour. Pour ne pas typer une des valeurs de retour, il suffit d'omettre le type ou d'utiliser le caractère '?'. Exemple : PROCÉDURE Nom_Procédure() : (chaîne,,chaîne)  RENVOYER (1,2,3) PROCÉDURE Nom_Procédure() : (chaîne,?,chaîne)  RENVOYER (1,2,3) Les types de retour autorisés sont les suivants : | | | Types | Vérifications effectuées lors de la compilation | Vérifications/Actions réalisées en exécution |
---|
booléen | | Conversions automatiques du WLangage | entier sans signe | | Conversions automatiques du WLangage | entier sans signe sur 8 octets | | Conversions automatiques du WLangage | entier | | Conversions automatiques du WLangage | entier sur 8 octets | | Conversions automatiques du WLangage | entier système | | Conversions automatiques du WLangage | monétaire | | Conversions automatiques du WLangage | numérique | | Conversions automatiques du WLangage | réel | | Conversions automatiques du WLangage | réel sur 4 octets | | Conversions automatiques du WLangage | caractère | | Conversions automatiques du WLangage | chaîne | | Conversions automatiques du WLangage | chaîne ANSI | Seules les chaînes sans taille sont autorisées | Conversions automatiques du WLangage | chaîne UNICODE | Seules les chaînes sans taille sont autorisées | Conversions automatiques du WLangage | buffer | Seules les chaînes sans taille sont autorisées | Conversions automatiques du WLangage | date | | Conversions automatiques du WLangage | heure | | Conversions automatiques du WLangage | dateheure | | Conversions automatiques du WLangage | durée | | Conversions automatiques du WLangage | procédure | Seuls les types Procédure sont autorisés | Seuls les types Procédure sont autorisés | police | Seuls les types Police sont autorisés | Seuls les types Police sont autorisés | <énumération> | | | <combinaison> | | | <classe> | - "dynamique" n'est pas autorisé
- Les classes doivent être corrélées
| Conversions autorisées uniquement | <structure> | - "dynamique" n'est pas autorisé
- les structures doivent être les mêmes.
| Les structures doivent être les mêmes. | <type avancé> | - "dynamique" pas autorisé
- Les types avancés doivent être les mêmes.
| Les types avancés doivent être les mêmes. | <classe .NET> | "dynamique" pas autorisé | | tableau | - "dynamique" pas autorisé
- Vérification du type des éléments
- Vérification du nombre de dimensions
| - Vérification du type des éléments
- Vérification du nombre de dimensions si les dimensions sont fournies,
- Vérification de chaque dimension
| tableau associatif | Vérification du type des éléments | Vérification du type des éléments | pile | Vérification du type des éléments | Vérification du type des éléments | file | Vérification du type des éléments | Vérification du type des éléments | liste | Vérification du type des éléments | Vérification du type des éléments |
Attributs d'extension Les attributs d'extension disponibles sont : - attribut d'extension de gestion des procédures zombies :
| | <zombie [commentaire = "texte"]> | Permet de définir une procédure obsolète (également appelée procédure zombie). Le mot-clé optionnel commentaire permet d'indiquer le texte qui sera affiché dans l'erreur de compilation associée à la procédure obsolète. Pour plus de détails, consultez Procédures zombies. |
- attribut d'extension de gestion du débogueur :
| | <sans pas à pas> | Permet d'indiquer que la procédure sera ignorée par le débogueur lors d'un débogage en mode "Pas à pas". |
- attributs d'extension spécifiques aux procédures locales, globales ou internes :
| | "<extension>" | Permet d'indiquer que la procédure est une procédure d'extension. Cette procédure WLangage pourra être appelée sur un type WLangage comme une fonction native du WLangage. Pour plus de détails, consultez Procédure d'extension. | <automatique> | Permet d'indiquer que cette procédure sera exécutée automatiquement après le code d'initialisation (de la fenêtre, de la page ou du projet).
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques.
Attention, cet attribut d'extension ne peut pas être appliqué à une procédure interne. | <fin évènement> | Permet d'indiquer que cette procédure sera exécutée lorsque le traitement contenant l'appel de la procédure sera fini. Pour plus de détails, consultez le paragraphe Option "A la fin de l'événement contenant l'appel".
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. | <fin traitement> | Permet d'indiquer que cette procédure sera exécutée lorsque le traitement contenant l'appel de la procédure sera fini.
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. |
- attribut d'extension de gestion des timers :
| | <délai=durée en centièmes de seconde> | Permet d'indiquer dans un Timer (lors du premier appel) le délai d'attente avant le démarrage de la procédure. Cet attribut d'extension doit être utilisé avec l'attribut d'extension <timer>. La valeur optionnelle délai en centièmes de seconde permet d'indiquer ce temps d'attente. Si cette valeur n'est pas précisée, il est nécessaire d'indiquer cette valeur lors de l'utilisation de l'attribut d'extension <timer>.
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. | <intervalle=durée en centième de secondes> | Permet d'indiquer la durée (intervalle de temps) entre 2 appels de la procédure. Cet attribut d'extension doit être utilisé avec les attributs d'extension <timer> ou <répétition>. La valeur optionnelle intervalle en centièmes de seconde permet d'indiquer cet intervalle de temps. Si cette valeur n'est pas précisée, il est nécessaire d'indiquer cette valeur avec l'attribut d'extension <timer>.
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. | <appels suivants[=type de rappel]> | Permet d'indiquer, dans une procédure appelée dans un Timer, le mode de fonctionnement des appels ultérieurs. Cet attribut d'extension doit être utilisé avec l'attribut d'extension <timer>. La valeur optionnelle de cet attribut d'extension peut être:
| | ignorer (Valeur par défaut) | La procédure est appelée immédiatement. Il n'y a pas de délai d'attente pour l'appel de la procédure. La procédure est appelée une seule fois sans répétition. | nouveau | Un nouveau Timer est déclenché. La procédure est appelée dans ce nouveau Timer. Attention, le Timer précédent n'est pas arrêté. Les Timers vont donc s'accumuler en mémoire. | relancer | Permet de relancer le Timer automatiquement à la fin de la procédure. L'attribut d'extension <intervalle> permet de définir l'intervalle de temps entre chaque appel de la procédure. |
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. | <répétition [=nombre de répétitions]> | Permet d'indiquer que la procédure est appelée plusieurs fois d'affilée (répétitions). La valeur optionnelle nombre de répétitions permet d'indiquer le nombre d'appels de la procédure.- Si cette valeur n'est pas précisée, la répétition sera réalisée jusqu'à :
- l'appel de la fonction FinAutomatismeProcédure.
- la fermeture de l'élément auquel appartient la procédure (fenêtre, page, état).
- la destruction de l'instance à laquelle appartient la procédure (pour plus de détails sur la notion d'instance, consultez l'aide sur l'Instanciation d'un objet).
- la fin de l'application (fermeture de l'application par l'utilisateur ou utilisation de la fonction Finprogramme).
- Si cette valeur est précisée, la procédure sera appelée autant de fois que le nombre indiqué.
En complément, consultez l'aide sur les Procédures automatiques. | <timer [=intervalle en centièmes de seconde]> | Permet d'indiquer que la procédure sera exécutée dans un Timer. Cet attribut d'extension est équivalent à la fonction TimerSys. La répétition est automatique. La valeur optionnelle intervalle en centièmes de seconde permet d'indiquer l'intervalle de temps entre 2 répétitions : - Si cette valeur n'est pas précisée, il est nécessaire d'indiquer l'intervalle de temps entre 2 répétitions via l'attribut d'extension <intervalle>.
- Si cette valeur est précisée, les valeurs des attributs d'extension <délai> et <intervalle> sont initialisées avec la valeur de l'intervalle précisée.
Cet attribut d'extension est incompatible avec les attributs d'extension <thread> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. |
- attribut d'extension de gestion des threads :
| | <thread> | Permet d'indiquer que la procédure sera exécutée dans un thread secondaire. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.
Cet attribut d'extension est incompatible avec les attributs d'extension <timer> et <thread principal>.
En complément, consultez l'aide sur les Procédures automatiques. | <thread principal> | Permet d'indiquer que la procédure sera exécutée dans un thread principal. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.
Cet attribut d'extension est incompatible avec les attributs d'extension <timer> et <thread>.
En complément, consultez l'aide sur les Procédures automatiques. | <thread principal asynchrone> | Permet d'indiquer que la procédure sera exécutée dans un thread principal, sans attendre la fin de l'exécution de la procédure. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.
Cet attribut d'extension est incompatible avec les attributs d'extension <timer> et <thread>.
En complément, consultez l'aide sur les Procédures automatiques. | <thread sécurisé> | Permet d'indiquer que la procédure sera exécutée dans un thread secondaire sécurisé. Pour plus de détails sur les threads, consultez Principe d'exécution des threads.
Cet attribut d'extension est incompatible avec les attributs d'extension <timer>, <thread principal> et <UI>.
En complément, consultez l'aide sur les Procédures automatiques. | <contexte HFSQL léger> | Provoque la copie immédiate d'une partie du contexte HFSQL courant. Seuls les répertoires où se trouvent les fichiers de données en HFSQL Classic et/ou les connexions en HFSQL Client/Serveur sont mémorisés.
Cet attribut d'extension doit être utilisé avec l'attribut d'extension <thread>. Pour plus de détails sur la gestion des threads, consultez l'aide sur la fonction ThreadExécute. En complément, consultez l'aide sur les Procédures automatiques. | <contexte HFSQL complet> | Provoque la copie immédiate du contexte HFSQL courant. Conseillé par exemple si le thread doit tenir compte des positions en cours dans les fichiers et requêtes du contexte de l'appelant.
Cet attribut d'extension doit être utilisé avec l'attribut d'extension <thread>. Pour plus de détails sur la gestion des threads, consultez l'aide sur la fonction ThreadExécute.
En complément, consultez l'aide sur les Procédures automatiques. |
Documentation également disponible pour…
|
|
|