Page 1 sur 1

[..] Variable globale dans une fonction

Posté : ven. 07 août 2015 16:44
par mdanielm
Bonjour,
Quel est l'intérêt d'une déclaration Global dans une fonction, comme ci dessous - peut-être pour en faire une UDF sans que $stop interfère avec l'appelant?
.---------------------
|Func main()
| Global $stop
| ........
|endfunc
|
|func search(...)
| Global $stop
| .....
|endfunc
|
|func Stop()
| Global $stop
| $stop = True
|endfunc
.-----------------------------------

Re: [..] Variable globale dans une fonction

Posté : ven. 07 août 2015 18:48
par jchd
Ca ne sert à rien, sauf à te compliquer la vie et risquer des bugs inutiles.

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 09:10
par mdanielm
J'ai vu ça dans un post récent de

jbnh » Jeu 30 Juil 2015 13:42

et je pensais qu'il y avait encore une astuce que je ne comprenais pas.
Comme par exemple limiter la portée d'une variable globale au module.
Cordialement

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 10:09
par jchd
Du tout. Il n'y a malheureusement pas de moyen pour faire ça, sauf à respecter une convention personnelle de type garde-fou mais qui n'empêche rien de façon stricte :

Code : Tout sélectionner

; MyUdf.au3

Local $_MyUDF_MyLocalVar
...
 
Pour moi, toute variable déclarée locale en tête d'un fichier inclus perso est considérée comme locale à ce fichier, même si sa portée effective est globale.

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 11:56
par mikell
jchd a écrit :Pour moi, toute variable déclarée locale en tête d'un fichier inclus perso est considérée comme locale à ce fichier, même si sa portée effective est globale.
Quel intérêt alors de déclarer cette variable en local si dans le script son statut est global ?
Dans le script de jbnh je ne vois pas l'intérêt de déclarer $stop en global dans chaque fonction plutôt qu'en global en tête de code

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 13:31
par jchd
Quel intérêt alors de déclarer cette variable en local si dans le script son statut est global ?
Moralement, ça m'empêche d'y toucher et d'y avoir accès en dehors de ce que je considère sa portée.
Dans le script de jbnh je ne vois pas l'intérêt de déclarer $stop en global dans chaque fonction plutôt qu'en global en tête de code
Aucun, c'est seulement dangereux.

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 16:18
par mikell
jchd a écrit :Moralement, ça m'empêche d'y toucher et d'y avoir accès en dehors de ce que je considère sa portée.
Laquelle portée est globale... j'aime bien le "moralement" Image
Aucun, c'est seulement dangereux.
J'en étais sûr à 99% mais le fait que le fichier d'aide autorise explicitement une déclaration en global dans une fonction m'avait fichu le doute :mrgreen:
"Global can be used to assign to global variables inside a function, etc"

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 18:01
par mdanielm
Ce n'est pas parce que le langage le permet, qu'il faut s'autoriser à l'utiliser.
Ce n'est pas la solution la plus simple qui est la meilleure, c'est la plus claire, la plus lisible, la plus fiable, la plus robuste...
Cordialement, sans haine et sans violence

Re: [..] Variable globale dans une fonction

Posté : sam. 08 août 2015 19:55
par mikell
mdanielm a écrit :Ce n'est pas la solution la plus simple qui est la meilleure, c'est la plus claire, la plus lisible, la plus fiable, la plus robuste...
Ce qui très souvent revient au même, particulièrement dans le cas présent où la solution la plus simple mais aussi la plus fiable (... etc) est de déclarer la variable globale en tête de script et pas dans les fonctions