Lua: Le tutoriel  wxWidgets
Lua
Les itérateurs: Qu'est-ce qu'un itérateur?.

Un itérateur est une construction qui permet de répéter (itérer) une même instruction sur les différents éléments d'un ensemble d'articles.

Dans Lua, les itérateurs sont généralement représentés par des fonctions:
Chaque fois que vous appellerez cette fonction itératrice, elle retournera l'élément suivant d'une liste.

Tout itérateur a besoin de garder un état précis, entre les appels successifs, de façon à savoir où il en est et comment procéder à partir de là.

Les "closures" fournissent un excellent mécanisme pour cette tâche.

Rappelez-vous qu'une fermeture ou clôture (en anglais, closure) est une fonction qui accède à une ou plusieurs variables locales de sa fonction englobante.

Ces variables conservent leurs valeurs à travers les appels successifs à la clôture, permettant à celle-ci de se rappeler où elle en est du parcours.

Bien sûr, pour créer une nouvelle clôsure, vous devrez aussi créer ses variables locales externes.
Par conséquent, une telle construction comporte généralement deux fonctions:
- la clôsure elle-même,
- et la fonction qui créer la clôsure.

Un exemple valant mieux qu'un long discours...
	function Iterateur(t)
	  local i = 0
	  local nbElements = table.getn(t)
	  return function()
		 i = i + 1
		 if i <= nbElements then return t[i] end
	  end
	end
				

La fonction Iterateur() utilise la fonction Lua table.getn() qui compte le nombre d'éléments de la table (t) et retourne chaque élément de la dite table, t[i].

Contrairement à ipairs, cet itérateur ne retourne pas l'index de chaque élément, mais seulement sa valeur.

Dans cet exemple, la fonction Iterateur(t) est la fabrique qui créer l'itérateur.

Chaque fois que vous l'appelez, elle créer une nouvelle clôture (l'itérateur lui-même).

Cette clôture conserve l'état de ses variables externes (t, i et n) de sorte que, chaque fois que vous l'appellerez, elle retournera la valeur suivante de la liste des t.

Quand il n'y a pas plus de valeur dans la liste, l'itérateur retourne nil.

Vous pouvez aussi utiliser ces itérateurs avec while.

-- Pour exécuter cet exemple, rajouter le code wxWidgets N°1
-- ( et bien sûr, la fonction du dessus! )		
		
	t = {10, 20, 30}
	iter = Iterateur(t)   -- création de l'itérateur
	while true do
	  local element = iter()   -- appel de l'itérateur
	  if element == nil then break end
	  Affiche(element)
	end
				
Cependant, il est beaucoup plus facile d'utiliser les génériques for, qui ont été conçus pour ce genre d'itération.
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