Page 1 sur 1

[R] Variable avec "Global" à placer

Posté : dim. 25 sept. 2011 20:01
par perfaram
Je viens de fermer un autre topic mais j'ai une autre question, sur autre chose. J'ai récupéré un script trouvé sur ce forum et je voudrais l'améliorer avec des notifications, mais je ne sais pas où mettre le "Global" pour que la variable soit valable sur tout le script.
Voici le spoiler
► Afficher le texte
C'est dans cette partie que je doit placer le "Global", de manière à ce que le message de la notification soit celui affiché dans la GUI. Le message correspond à "$sReceived".

Quelqu'un a-t'il une idée ?

Re: [...] Variable avec "Global" à placer

Posté : dim. 25 sept. 2011 20:49
par moi
perfaram a écrit :
► Afficher le texte

Code : Tout sélectionner

Func _TCP_Receive_PreProcess($hSocket, $sReceived, $iError)
    Global $sReceived = StringSplit($sReceived, "##FIN##", 1)
    ConsoleWrite("+> Received Text: " & $sReceived & @CRLF)
   
:?:

Re: [...] Variable avec "Global" à placer

Posté : dim. 25 sept. 2011 21:00
par Tlem
Une variable globale est généralement initialisée en début de script. Jetez un coup d’œil sur ceci : http://www.autoitscript.fr/forum/viewto ... f=11&t=249
Section III

Re: [..] Variable avec "Global" à placer

Posté : mer. 28 sept. 2011 16:03
par perfaram
Tlem a écrit :Une variable globale est généralement initialisée en début de script. Jetez un coup d’œil sur ceci : http://www.autoitscript.fr/forum/viewto ... f=11&t=249
Section III
Le problème est que cette variable est déclarée seulement dans et pour cette fonction, or je voudrais l'utiliser ailleur. Et comment la déclarer ailleur ? en faisant
► Afficher le texte
? Ou alors placer le Global quelque par par là (cf. Spoiler du message principal) ?

Re: [..] Variable avec "Global" à placer

Posté : mer. 28 sept. 2011 16:05
par guitarist
Au début du fichier ou se trouve ta fonction je dirais.

Re: [..] Variable avec "Global" à placer

Posté : mer. 28 sept. 2011 19:20
par Yogui
je vais paraphraser Tlem ... mais
wikipedia a écrit :En programmation informatique, une variable globale est une variable déclarée à l'extérieur du corps de toute fonction ou classe, et pouvant donc être utilisée n'importe où dans le programme. On parle également de variable de portée globale.
Donc :

il n'y a pas d'endroit précis ou déclarer une variable global tant que cette déclaration se fait en dehors d'une fonction (ou d'une classe)

La "coutume" veux que les variables soient déclarer en début de programme (pratique en cas de relecture et ou de débogage)

Re: [..] Variable avec "Global" à placer

Posté : mer. 28 sept. 2011 22:35
par mikell
Et...
perfaram a écrit :Global $MaVariable = _MaFonction()
Non, c'est vilain ça... tu vas juste écrire :
Global $MaVariable
tout en haut du script, juste en dessous des includes, et ça va le faire :wink:

A la rigueur, si tu veux lui attribuer une valeur quelconque au démarrage du script, tu peux écrire par exemple :
Global $MaVariable = 3 (pour un nombre)
Global $MaVariable = "tagada" (pour du texte)
etc, cette valeur pouvant ensuite être modifiée en cours de script

Re: [..] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 17:58
par perfaram
Je ne savais pas qu'il suffisait de mettre "Global $MaVariable". Je pensai qu'il était obligatoire de mettre "Global $MaVariable=ValeurDeMaVariable". Merci à tous et bon après-midi !

Re: [..] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 18:06
par jchd
Yogui a écrit :je vais paraphraser Tlem ... mais
wikipedia a écrit :En programmation informatique, une variable globale est une variable déclarée à l'extérieur du corps de toute fonction ou classe, et pouvant donc être utilisée n'importe où dans le programme. On parle également de variable de portée globale.
Donc :

il n'y a pas d'endroit précis ou déclarer une variable global tant que cette déclaration se fait en dehors d'une fonction (ou d'une classe)

La "coutume" veux que les variables soient déclarer en début de programme (pratique en cas de relecture et ou de débogage)
Faux.

Code : Tout sélectionner

_Display($str)

Global $str = "Voyons si ça marche ..."

Func _Display($s)
    ConsoleWrite($s & @LF)
EndFunc
 

Re: [..] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 18:45
par mikell
jchd a écrit :"Voyons si ça marche ..."
Un peu facile :mrgreen:
Dans ce cas la fonction appelle la variable avant sa déclaration...
J'imagine (gentiment) que Tlem voulait dire que le scope d'une variable peut être changé en Global n'importe où dans le script

Re: [R] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 21:51
par jchd
Facile ou pas, il reste qu'AutoIt impose qu'une variable soit initialisée (déclarée ou pas) _avant_ son utilisation.
L'affirmation de Yogui selon laquelle "il n'y a pas d'endroit précis ou déclarer une variable global tant que cette déclaration se fait en dehors d'une fonction (ou d'une classe)" est donc fausse, du moins en ce qui concerne AutoIt (principalement parce qu'AutoIt est interprété).
J'imagine (gentiment) que Tlem voulait dire que le scope d'une variable peut être changé en Global n'importe où dans le script
Cette affirmation est tout aussi fausse.
► Afficher le texte

Re: [R] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 22:17
par mikell
jchd a écrit :Cette affirmation est tout aussi fausse
Je vois le lézard ...
► Afficher le texte

Re: [R] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 23:03
par jchd
Pas un lézard, un varan !
Il n'y a aucun moyen de rendre globale une variable qui a une définition locale dans une fonction par une déclaration globale située après (dans l'ordre d'interprétation) l'invocation de la fonction dans laquelle on déclare cette variable locale.
► Afficher le texte
Voir les seconds appels à Display1 et Display2.

Re: [..] Variable avec "Global" à placer

Posté : lun. 03 oct. 2011 23:38
par Tlem
mikell a écrit :J'imagine (gentiment) que Tlem voulait dire que le scope d'une variable peut être changé en Global n'importe où dans le script
Ce n'est absolument pas ce que je voulais dire.
J'ai dit :
Tlem a écrit :Une variable globale est généralement initialisée en début de script. Jetez un coup d’œil sur ceci : http://www.autoitscript.fr/forum/viewto ... f=11&t=249
Section III
Certes, je n'ai pas préciser les détails que jchd à donné, car cela m’a semblé superflu au moment de ma réponse car celle-ci prenait en compte le fait que chaque variable était obligatoirement déclarée avant une utilisation quelconque.

Ceci dit j'ai précisé "généralement" car celui qui sait ce qu'il fait, peut tranquillement déclarer une globale là ou il veut du moment qu'elle n'est pas utilisée avant sa déclaration et qu'elle est en dehors d'une fonction (car la déclaration d'une globale à l'intérieur d'une fonction n'a pas de sens). :mrgreen:

En ce qui me concerne, afin d'éviter ce genre de désagrément, j'utilise ce qui suit (en début de script au niveau de la section II du lien donné précédemment :roll: ) car cela permet d'éviter bon nombres de problèmes : :mrgreen:

Code : Tout sélectionner

#AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
Si vous hésitez sur l'emplacement de cette ligne, hé bien mettez là tout au début du script (ligne 1). :wink:

Re: [R] Variable avec "Global" à placer

Posté : mar. 04 oct. 2011 00:49
par jchd
Oh que oui, le wrapper fait un excellent garde-fou contre bien des erreurs ! Suivez ce conseil avisé.