portées des variables et passage par référence
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 1
- Messages : 13
- Enregistré le : jeu. 13 sept. 2018 13:54
- Status : Hors ligne
portées des variables et passage par référence
Bonjour!
venant de C++, je ne suis pas habituée à des langages aussi permissif, et n'étant pas très bonne en programmation, j'ai du mal à discerner ce que je peux ou ne peux pas faire.
J'aurais aimé écrire une function pour l'associé à un bouton. Dans la fonction j'appelle une autre fonction. Appelons les respectivement 1 et 2.
En dehors de 1, je mets des variables globales utilisées dans 1. Si je les modifies dedans, elles le seront aussi à l'extérieur, c'est bien ça?
Par contre, dans 1 je mets de nouvelles variables locales. Là, elles seront modifées dans 2. Mais est ce que la modification va rester dans le contexte de la function 1? Il y a t-il des conditions pour que ça le soit ? Par ce que pour l'instant j'ai juste écrit :
function2( $nb_de_points_int, $case ).
Merci pour m'éclairer!
venant de C++, je ne suis pas habituée à des langages aussi permissif, et n'étant pas très bonne en programmation, j'ai du mal à discerner ce que je peux ou ne peux pas faire.
J'aurais aimé écrire une function pour l'associé à un bouton. Dans la fonction j'appelle une autre fonction. Appelons les respectivement 1 et 2.
En dehors de 1, je mets des variables globales utilisées dans 1. Si je les modifies dedans, elles le seront aussi à l'extérieur, c'est bien ça?
Par contre, dans 1 je mets de nouvelles variables locales. Là, elles seront modifées dans 2. Mais est ce que la modification va rester dans le contexte de la function 1? Il y a t-il des conditions pour que ça le soit ? Par ce que pour l'instant j'ai juste écrit :
function2( $nb_de_points_int, $case ).
Merci pour m'éclairer!
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: portées des variables et passage par référence
Il n'y a que deux portées en AutoIt : locale (à une fonction) et globale (tout le script). Il n'y a ni portée de bloc ni portée d'include.
Des variables locale à la fonction A qui fait appel à la fonction B (sans les passer en argument) ne sont pas accessibles dans B. Si l'on souhaite que ces variables soient utilisées par B il faut les lui transmettre, par copie ou par référence (ByRef).
Des variables locale à la fonction A qui fait appel à la fonction B (sans les passer en argument) ne sont pas accessibles dans B. Si l'on souhaite que ces variables soient utilisées par B il faut les lui transmettre, par copie ou par référence (ByRef).
Global $PI = ACos(-1) ; accessible partout à partir de ce point
_main()
Func _main()
MsgBox(0, "", "π ≈ " & $PI)
Local $E = Exp(1) ; accessible dans _main
MsgBox(0, "", "e ≈ " & $E)
_e_pow_Pi($E) ; on passe l'argument, inaccessible depuis _e_pow_pi, ici par référence
_is_Pi_pow_X_transcendant($E) ; idem mais passage par copie
EndFunc
Func _e_pow_Pi(ByRef $real)
MsgBox(0, "", "e^π ≈ " & $real ^ $PI)
EndFunc
Func _is_Pi_pow_X_transcendant($X)
MsgBox(0, "", "π^e ≈ " & $PI ^ $X)
;
; test pour déterminer si π ^ $X est transcendant (laissé en exercice)
;
EndFunc
_main()
Func _main()
MsgBox(0, "", "π ≈ " & $PI)
Local $E = Exp(1) ; accessible dans _main
MsgBox(0, "", "e ≈ " & $E)
_e_pow_Pi($E) ; on passe l'argument, inaccessible depuis _e_pow_pi, ici par référence
_is_Pi_pow_X_transcendant($E) ; idem mais passage par copie
EndFunc
Func _e_pow_Pi(ByRef $real)
MsgBox(0, "", "e^π ≈ " & $real ^ $PI)
EndFunc
Func _is_Pi_pow_X_transcendant($X)
MsgBox(0, "", "π^e ≈ " & $PI ^ $X)
;
; test pour déterminer si π ^ $X est transcendant (laissé en exercice)
;
EndFunc
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
- Niveau 1
- Messages : 13
- Enregistré le : jeu. 13 sept. 2018 13:54
- Status : Hors ligne
Re: portées des variables et passage par référence
merci pour la réponse!
Elle m'a l'air claire, mais je ne suis pas assez forte et spécialiste pour être sûre d'avoir tout compris...
Donc il y a deux portés, ok.
Mais donc, dans l'exemple, les functions d'exponentiations ne peuvent accéder à $E que parce qu'on lui donne dans les arguments de la fonction, c'est ça? Et est ce que dans les deux cas, si on modifie $E dans les fonctions pow, c'est bien $E qui est modifié ?
Autrement dit, est ce que rajouter le ByRef change quelque chose?
Désolé de demander, mais je ne sais pas du tout comment vérifier. Auto-it ne m'est absolument pas naturel pour pouvoir tester des choses, comme peuvent l'être d'autres compilateur.
Elle m'a l'air claire, mais je ne suis pas assez forte et spécialiste pour être sûre d'avoir tout compris...
Donc il y a deux portés, ok.
Mais donc, dans l'exemple, les functions d'exponentiations ne peuvent accéder à $E que parce qu'on lui donne dans les arguments de la fonction, c'est ça? Et est ce que dans les deux cas, si on modifie $E dans les fonctions pow, c'est bien $E qui est modifié ?
Autrement dit, est ce que rajouter le ByRef change quelque chose?
Désolé de demander, mais je ne sais pas du tout comment vérifier. Auto-it ne m'est absolument pas naturel pour pouvoir tester des choses, comme peuvent l'être d'autres compilateur.
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: portées des variables et passage par référence
Bonsoir Crystal.
En réponse à votre présentation, je vous ai indiqué la manière d'écrire "AutoIt". Merci d'éditer et de corriger les messages non conformes.
Envoyé de mon Smartphone en utilisant Tapatalk
En réponse à votre présentation, je vous ai indiqué la manière d'écrire "AutoIt". Merci d'éditer et de corriger les messages non conformes.
Envoyé de mon Smartphone en utilisant Tapatalk
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: portées des variables et passage par référence
C'est exactement comme en C++ : quand on passe la copie d'une variable, modifier la copie n'affecte bien sûr pas la variable mère. Quand on passe une référence à une variable, la modifier par référence change obligatoirement la variable (la seule existante).
La vérification est immédiate : il suffit d'essayer !
Le terme compilateur est abusif ; il s'agit d'un simple interpréteur. Et je ne saurais dire si C++ est plus "naturel" qu'AutoIt ou inversement, même si j'ai quand même ma petite idée.
La vérification est immédiate : il suffit d'essayer !
Le terme compilateur est abusif ; il s'agit d'un simple interpréteur. Et je ne saurais dire si C++ est plus "naturel" qu'AutoIt ou inversement, même si j'ai quand même ma petite idée.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: portées des variables et passage par référence
Bonjour,
Et j’aimerais connaitre votre "petite idée" si je puisse me permettre....même si j'ai quand même ma petite idée.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: portées des variables et passage par référence
Si "naturel" signifie "abordable par un néophyte" alors AutoIt l'est considérablement plus que bien des langages plus répandus.
La notion de "naturel" pour un langage artificiel est très subjective et les avis peuvent diverger selon le contexte dans lequel les personnes se trouvent, leurs besoins et l'expérience dont elles disposent.
La notion de "naturel" pour un langage artificiel est très subjective et les avis peuvent diverger selon le contexte dans lequel les personnes se trouvent, leurs besoins et l'expérience dont elles disposent.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Re: portées des variables et passage par référence
Après avoir pris de bonnes habitudes de programmation en C++, je ne vois pas l'intérêt de les perdre pour utiliser à tout prix la "permissivité" d'Autoit. Ce n'est pas une obligation.
Exemple:
De nombreux exemples de la documentation utilisaient l'instruction:
If _WinAPI_GetVersion() < 6.0 Then Exit ...
et il a fallu un certain temps avant que les auteurs se rendent compte que la permissivité d'AutoIt, ici la comparaison d'une chaîne avec un nombre, est dangereuse (tester avec Windows 10), pas nécessairement à l'instant où on programme mais plusieurs années après!
Exemple:
De nombreux exemples de la documentation utilisaient l'instruction:
If _WinAPI_GetVersion() < 6.0 Then Exit ...
et il a fallu un certain temps avant que les auteurs se rendent compte que la permissivité d'AutoIt, ici la comparaison d'une chaîne avec un nombre, est dangereuse (tester avec Windows 10), pas nécessairement à l'instant où on programme mais plusieurs années après!
Re: portées des variables et passage par référence
Sinon il y a aussi les variables Local Static.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: portées des variables et passage par référence
Le modificateur Static n'indique pas une portée mais empêche la réinitialisation d'une variable (locale) dans une fonction.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Re: portées des variables et passage par référence
De nombreux exemples de la doc utilisent Local et Global dans le corps principal du programme, genre:
Je pense qu'ils veulent faire la différence entre une variable qui sera utilisée uniquement dans le corps du programme (Local) et une variable qui sera utilisée aussi dans les fonctions (Global).
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: portées des variables et passage par référence
On peut faire ça.
Perso j'aime bien la convention suivante pour la portée des variables, avec une sémantique légèrement différente :
Global (en dehors d'une fonction) = vraiment globale, donc accessible partout après sa définition
Local en dehors d'une fonction = n'a pas vocation a être accédée ailleurs que dans le fichier source où elle figure (comme en C). C'est la portée "fichier" du pauvre.
Global dans une fonction = NO-NO, nein, interdit, forbidden, nada, verbotten, caca dégueu.
Pour ce qui est de Dim, cette syntaxe ne devrait avoir qu'une seule utilisation : lorsqu'on passe une variable ByRef à une fonction et qu'on doit la redéfinir pour en faire une array, typiquement pour y stocker un résultat sans création d'une variable intermédiaire et copie. Pour moi tout autre emploi est proscrit.
Perso j'aime bien la convention suivante pour la portée des variables, avec une sémantique légèrement différente :
Global (en dehors d'une fonction) = vraiment globale, donc accessible partout après sa définition
Local en dehors d'une fonction = n'a pas vocation a être accédée ailleurs que dans le fichier source où elle figure (comme en C). C'est la portée "fichier" du pauvre.
Global dans une fonction = NO-NO, nein, interdit, forbidden, nada, verbotten, caca dégueu.
Pour ce qui est de Dim, cette syntaxe ne devrait avoir qu'une seule utilisation : lorsqu'on passe une variable ByRef à une fonction et qu'on doit la redéfinir pour en faire une array, typiquement pour y stocker un résultat sans création d'une variable intermédiaire et copie. Pour moi tout autre emploi est proscrit.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.