portées des variables et passage par référence

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
sleinininono
Niveau 1
Niveau 1
Messages : 8
Enregistré le : jeu. 13 sept. 2018 12:54
Status : Hors ligne

portées des variables et passage par référence

#1

Message par sleinininono » dim. 16 sept. 2018 15:40

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!

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 1988
Enregistré le : lun. 30 mars 2009 21: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

#2

Message par jchd » dim. 16 sept. 2018 16:40

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).
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
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

sleinininono
Niveau 1
Niveau 1
Messages : 8
Enregistré le : jeu. 13 sept. 2018 12:54
Status : Hors ligne

Re: portées des variables et passage par référence

#3

Message par sleinininono » dim. 16 sept. 2018 16:48

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.

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11288
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: portées des variables et passage par référence

#4

Message par Tlem » dim. 16 sept. 2018 22:07

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
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é".

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 1988
Enregistré le : lun. 30 mars 2009 21: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

#5

Message par jchd » dim. 16 sept. 2018 23:19

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 cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 564
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: portées des variables et passage par référence

#6

Message par walkson » lun. 17 sept. 2018 00:51

Bonjour,
même si j'ai quand même ma petite idée.
Et j’aimerais connaitre votre "petite idée" si je puisse me permettre....
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 1988
Enregistré le : lun. 30 mars 2009 21: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

#7

Message par jchd » lun. 17 sept. 2018 12:00

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 cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Avatar du membre
mdanielm
Membre émérite
Membre émérite
Messages : 201
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: portées des variables et passage par référence

#8

Message par mdanielm » mar. 18 sept. 2018 04:17

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!

Répondre