Lua: Le tutoriel  wxWidgets
Lua
Les variables: La portée lexicale.

Lua est un langage à portée lexicale.

Il est important d'avoir toujours à l'esprit cette notion de portée lexicale et de bien comprendre où commence et où se termine la portée d'une variable, faute de quoi... petitS bugS en perspective!

La portée d'une variable, commence juste après la première déclaration de la variable à l'intérieur d'un bloc et dure jusqu'à la fin de ce bloc.

Un bloc, est un ensemble d'instructions sur plusieurs lignes.

Une fonction, une boucle for, while, do ..etc constitue un bloc et toute déclaration d'une variable à l'intérieure d'un bloc, appartient à ce bloc.

Un petit exemple:
	x = 10   -- ceci est une variable globale
	do -- déclaration d'un nouveau bloc
	  local x = x	-- initialisation d'une nouvelle variable 'x', 
	               -- MAIS cette fois ci "local" en reprenant la 
	               -- première valeur de x global. (10)
	  print("1: "..x)	--> 10
	  x = x + 1
	  do	-- déclaration d'un autre bloc à l'intérieure du premier
	   local x = x + 1   -- encore une autre variable 'x'... 
		                  -- mais locale au deuxième bloc
	   print("2: "..x)	--> 12
	  end
	  print("3: "..x)	--> 11
	end
	print("4: "..x)	--> 10 
				

La variable x est maintenant sortie des deux blocs, les variables locales n'existent plus, elle retrouve donc sa première valeur: x = 10

Et il ne faut pas oublier que chaque exécution d'une déclaration qui redéfinit une local crée automatiquement une nouvelle variable locale.

Prenez l'exemple suivant:
	a = {}	-- déclaration d'une table 'a'
	local x = 20	-- déclaration d'une variable locale 'x'
	for i = 1, 10 do
	  local y = 0 -- déclaration d'une nouvelle variable locale
                  -- et interne à la boucle for... end
	  a[i] = function() y = y + 1; return x + y end

      print("i = "..i.."   (x + y) = "..x + y)
	end	
				

Les tables et les fonctions seront expliquées plus loin.

Mais pour le moment, il faut comprendre que la boucle tourne 10 fois ( ce qui représentent, dix instances de la fonction anonyme ).
Chaque boucle, va utiliser une nouvelle variable 'y', tandis que toutes partagent le même 'x'.
La variable i prendra + 1 à chaque tour, normal, mais x + y sera toujours égal à 20 du fait que y redevient local à chaque tour et donc = 0


Il est très important de bien comprendre cette notion de portée lexicale et de bien saisir que chaque variable locale n'est définie et n'existe que dans le bloc qui la contient.

logo wxWidgets Le savoir ne vaut que s'il est partagé par tous...
logo-internet_32x32.png Dernière mise à jour, le 20 novembre 2012.
Valid XHTML 1.0 Transitional

wxlualogo
Flèche haut
Flèche gauche
Flèche haut
Flèche droite