Souvent, le WLangage profite d'améliorations conséquentes qui lui redonne un petit goût de nouveauté. Les Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! fait partie de ces évolutions qui changent la donne. Avant d'expliquer plus en détail, rappelons que dans windev, on a plusieurs types de procédures : Les Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. Elles sont stockées dans une collection de procédures (fichier *.wdg) et elles peuvent être appelées de n'importe où dans le projet. Les Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. Stockées dans les fenêtres (fichier *.wdw) et elles peuvent être appelées de n'importe où dans le code de la fenêtre. Elles ne peuvent pas être utilisées ailleurs. Les méthodes. Ce sont des procédures associées à une classe (fichier *.wdc). Elles peuvent être locales ou globales, publique, protégée ou privée. Mais là, on rentre dans le domaine de la Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! (Programmation Orientée Objet) et ce n'est pas le sujet de l'article et je suis pas superfort de ce coté... Les procédures compilées dynamiquement. On utilise la fonction Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. Les procédures appelées à la suite d'un événement sur un champ de l'application. Et maintenant, nous avons les procédures internes qui peuvent être définie et utilisée dans les autres types de procédures citées précédemment. Mais elle peut aussi être définie dans une autre procédure interne. Comment ça marche ? Un petit exemple étant plus efficace qu'une longue présentation, voici un exemple de procédure interne : Code (Text): PROCEDURE ProLoc() PROCEDURE INTERNE ProInt() RENVOYER "Hello world" FIN Trace(ProInt()) On définit ici une procédure locale qui s'appelle ProLoc et dans celle-ci, on définit la procédure interne ProInt. Dans quel cas s'en sert-on ? On s'en sert dans plusieurs cas. Tout d'abord, on peut s'en servir pour avoir un joli code bien écrit, autodocumenté (si vous ne connaissez pas ce terme, il faudra que je fasse un article dessus) et qui respecte la convention DRY (Don't Repeat Yourself, un autre article à prévoir). Le code suivant : Code (Text): PROCEDURE ProcédureLocale() POUR i = 1 _A_ 10 Trace(i) Trace(i * i) Trace(Racine(i + 1)) FIN POUR i = 30 _A_ 40 Trace(i) Trace(i * i) Trace(Racine(i + 1)) FIN POUR i = 80 _A_ 100 Trace(i) Trace(i * i) Trace(Racine(i + 1)) FIN devient Code (Text): PROCEDURE ProcédureLocale() PROCEDURE INTERNE TracerEntierSousToutesCesFormes(pEntier est entier) Trace(pEntier) Trace(pEntier * pEntier) Trace(Racine(pEntier + 1)) FIN POUR i = 1 _A_ 10 TracerEntierSousToutesCesFormes(i) FIN POUR i = 30 _A_ 40 TracerEntierSousToutesCesFormes(i) FIN POUR i = 80 _A_ 100 TracerEntierSousToutesCesFormes(i) FIN Le code devient ainsi plus clair, et on évite les répétitions... Plusieurs pièges vous attendent lors de l'utilisation des procédures internes. Voici le premier. Une procédure interne ne peut pas appeler une autre procédure interne définie au même niveau qu'elle (mais elle peut s'auto-appeler) Code (Text): PROCEDURE ProcédureLocale() PROCEDURE INTERNE PasLeDroit() Trace("Hello world") FIN PROCEDURE INTERNE Test() PasLeDroit() // Cela ne fonctionne pas FIN Test() Mais on peut s'en sortir en utilisant une variable de type Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. En effet, une procédure interne est une procédure avant tout. Notez que je préfixe le nom des procédures internes par un i dans mon exemple pour les distinguer des variables de type procédure. Code (Text): PROCEDURE ProcédureLocale() PasLeDroit est une procédure PROCEDURE INTERNE iPasLeDroit() Trace("Hello world") FIN PasLeDroit = iPasLeDroit PROCEDURE INTERNE iTest() PasLeDroit() // Cela fonctionne FIN iTest()
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! Souvent, le WLangage profite d'améliorations conséquentes qui lui redonne un petit goût de nouveauté. Les Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! fait partie de ces évolutions qui changent la donne. Avant d'expliquer plus en détail, rappelons que dans windev, on a plusieurs types de procédures : Les Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. Elles sont stockées dans une collection de procédures (fichier *.wdg) et elles peuvent être appelées de n'importe où dans le projet. Les Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. Stockées dans les fenêtres (fichier *.wdw) et elles peuvent être appelées de n'importe où dans le code de la fenêtre. Elles ne peuvent pas être utilisées ailleurs. Les méthodes. Ce sont des procédures associées à une classe (fichier *.wdc). Elles peuvent être locales ou globales, publique, protégée ou privée. Mais là, on rentre dans le domaine de la Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! (Programmation Orientée Objet) et ce n'est pas le sujet de l'article et je suis pas superfort de ce coté... Les procédures compilées dynamiquement. On utilise la fonction Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. Les procédures appelées à la suite d'un événement sur un champ de l'application. Et maintenant, nous avons les procédures internes qui peuvent être définie et utilisée dans les autres types de procédures citées précédemment. Mais elle peut aussi être définie dans une autre procédure interne. Comment ça marche ? Un petit exemple étant plus efficace qu'une longue présentation, voici un exemple de procédure interne : Code (Text): PROCEDURE ProLoc() PROCEDURE INTERNE ProInt() RENVOYER "Hello world" FIN Trace(ProInt()) On définit ici une procédure locale qui s'appelle ProLoc et dans celle-ci, on définit la procédure interne ProInt. Dans quel cas s'en sert-on ? On s'en sert dans plusieurs cas. Tout d'abord, on peut s'en servir pour avoir un joli code bien écrit, autodocumenté (si vous ne connaissez pas ce terme, il faudra que je fasse un article dessus) et qui respecte la convention DRY (Don't Repeat Yourself, un autre article à prévoir). Le code suivant : Code (Text): PROCEDURE ProcédureLocale() POUR i = 1 _A_ 10 Trace(i) Trace(i * i) Trace(Racine(i + 1)) FIN POUR i = 30 _A_ 40 Trace(i) Trace(i * i) Trace(Racine(i + 1)) FIN POUR i = 80 _A_ 100 Trace(i) Trace(i * i) Trace(Racine(i + 1)) FIN devient Code (Text): PROCEDURE ProcédureLocale() PROCEDURE INTERNE TracerEntierSousToutesCesFormes(pEntier est entier) Trace(pEntier) Trace(pEntier * pEntier) Trace(Racine(pEntier + 1)) FIN POUR i = 1 _A_ 10 TracerEntierSousToutesCesFormes(i) FIN POUR i = 30 _A_ 40 TracerEntierSousToutesCesFormes(i) FIN POUR i = 80 _A_ 100 TracerEntierSousToutesCesFormes(i) FIN Le code devient ainsi plus clair, et on évite les répétitions... Plusieurs pièges vous attendent lors de l'utilisation des procédures internes. Voici le premier. Une procédure interne ne peut pas appeler une autre procédure interne définie au même niveau qu'elle (mais elle peut s'auto-appeler) Code (Text): PROCEDURE ProcédureLocale() PROCEDURE INTERNE PasLeDroit() Trace("Hello world") FIN PROCEDURE INTERNE Test() PasLeDroit() // Cela ne fonctionne pas FIN Test() Mais on peut s'en sortir en utilisant une variable de type Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!. En effet, une procédure interne est une procédure avant tout. Notez que je préfixe le nom des procédures internes par un i dans mon exemple pour les distinguer des variables de type procédure. Code (Text): PROCEDURE ProcédureLocale() PasLeDroit est une procédure PROCEDURE INTERNE iPasLeDroit() Trace("Hello world") FIN PasLeDroit = iPasLeDroit PROCEDURE INTERNE iTest() PasLeDroit() // Cela fonctionne FIN iTest() Cliquez pour agrandir...
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! depuis la version 23 on peut appeler une procédure interne a partir d'une autre de même niveauCliquez pour agrandir...