Page 1 sur 1

Portée des variables

Publié : 29 août 2018, 01:04
par lmet
Bonsoir,

Dans les scripts lua on voit souvent l'utilisation du mot-clé "local" ie: local a = "toto" pour limiter la portée de la variable mais si l'on déclare la variable comme étant globale ie: a = "toto" on s'aperçoit qu'à l'appel suivant du script la variable "a" vaut "nil"

Si l'on souhaite que la variable soit globale, faut-il obligatoirement passer par :

commandArray['Variable:a']= "On"
pour pouvoir la récupérer :
if ( uservariables["a"] == "On" ) then ... par exemple ?

Si c'est le cas alors je ne vois pas l'utilité de déclarer ses variables comme étant locales !

D'avance merci pour vos réponses car cela me chagrine un peu :(

Re: Portée des variables

Publié : 29 août 2018, 09:25
par vil1driver
Salut,

Je ne suis pas expert mais de ce que j'ai compris.
'portée' ne signifie pas persistance.

Si par exemple tu déclares une variable local au sein d'un IF
Alors elle vaudra nil en dehors,
Il faudra soit l'avoir déclaré avant soit qu'elle soit globale.

Si dans le script tu appelles (comme je le fais avec modules.lua) un autre fichier, les variables passeront de l'un à l'autre que si elles sont globales..

L'intérêt est au niveau de l'usage de ressources, une question de performance il me semble..

Maintenant c'est expliqué plus en détail par ci par là
https://www.google.fr/search?q=lua+local+vs+global

Re: Portée des variables

Publié : 02 sept. 2018, 16:36
par lmet
Bonjour,

Merci vil1driver pour tes explications lua fonctionne un peu différemment que d'autres langages.

Je vais retenir que le mot clé "local" ne s'applique qu'à l'intérieur d'un bloc de type "if ... end" "do ... end" "function ... end" ...
A l'extérieur de ces blocs la variable reste globale même si le mot clé "local" est appliqué.

Ce n'est pas forcement logique, il faut juste s'habituer ou changer de langage mais là je chipote ;)

Re: Portée des variables

Publié : 02 sept. 2018, 16:51
par vil1driver
Non, local = local

Mais local peut être restreint (le script, une fonction, un bloc IF..) tout dépend du moment où la déclaration est faite.

Dans 99% des cas il est préférable de les définir ainsi.
C'est une bonne pratique que personnellement j'essaie de respecter tant que je le peux.

Maintenant j'ai découvert lua en même temps que domoticz alors il y a bien plus expert sur le sujet, certains articles sur la toile sauront sûrement mieux t'expliquer les choses

Re: Portée des variables

Publié : 02 sept. 2018, 17:16
par lmet
Je dois mal m'exprimer ...

Code : Tout sélectionner

local a = 1

if a == 1 then
    print ("valeur de a " .. tostring (a)) -- en toute logique a devrait valoir 'nil' or a vaut 1
    local b = 3
end
-- là c'est bon a vaut 1 et b vaut bien "nil'  
print ("valeur a et b : " .. tostring (a) .. " " .. tostring (b))

Re: Portée des variables

Publié : 02 sept. 2018, 19:02
par cyberbob
Je me trompe peut être mais il me semble que dans cet exemple,
la variable "a" est déclarée pour tout le script, donc y compris dans le if/end
la variable "b" est uniquement déclarée entre le if et le end, et non en dehors du if/end.

Re: Portée des variables

Publié : 02 sept. 2018, 23:40
par lmet
Bonsoir,
cyberbob a écrit :Je me trompe peut être mais il me semble que dans cet exemple,
la variable "a" est déclarée pour tout le script, donc y compris dans le if/end
la variable "b" est uniquement déclarée entre le if et le end, et non en dehors du if/end.
C'est un peu ce que j'essaie de démontrer la variable "a" a beau être déclarée avec le mot clé "local" sa portée est globale CQFD