0Pricing
Lua Academy · Leçon

Itérateurs sans état

Écrivez des itérateurs sans état comme ipairs et implémentez vos propres variantes.

Itérateurs sans état est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Qu’est-ce qu’un itérateur sans état ?

Un itérateur sans état ne conserve aucun état interne. Toutes les informations sont transmises comme arguments à chaque appel : l’état invariant et la variable de contrôle actuelle.

ipairs : l’exemple canonique

ipairs est sans état : il utilise la table comme état et l’index actuel comme variable de contrôle.

local function myIpairs(t, i)
  i = i + 1
  local v = t[i]
  if v ~= nil then return i, v end
end
-- Use: for i,v in myIpairs, t, 0 do

Itérateur squares

Un itérateur sans état qui renvoie les carrés successifs. L’état contient la limite et la variable de contrôle correspond au nombre actuel.

local function squaresIter(max, n)
  n = n + 1
  if n <= max then return n, n*n end
end
for n, sq in squaresIter, 5, 0 do
  print(n, sq)
end

Aucune fermeture nécessaire

Les itérateurs sans état évitent l’allocation de fermetures. Comme tout l’état est transmis en argument, aucune allocation sur le tas n’est effectuée à chaque itération.

Implémenter un itérateur de type pairs

Un itérateur clé-valeur sans état utilisant next comme fonction d’itération — exactement comme fonctionne pairs.

for k, v in next, {a=1, b=2} do
  print(k, v)
end

Fonction next

next(t, k) renvoie la paire clé-valeur suivante après la clé k. Transmettez nil (ou omettez-le) pour commencer au début.

local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)

Itérateur personnalisé d’intervalle

Un itérateur d’intervalle sans état avec un pas. L’état contient une table de configuration ; la variable de contrôle est la valeur actuelle.

local function rangeIter(state, n)
  n = n + state.step
  if n <= state.limit then return n end
end
for v in rangeIter, {limit=10, step=2}, 0 do
  print(v)
end

Avantage en matière de performances

Les itérateurs sans état sont idéaux pour les boucles intensives. Aucune fermeture n’est créée à chaque appel, ce qui les rend plus rapides que les itérateurs à fermeture avec état pour les parcours simples.

Limitations

Lorsque l’itération nécessite un état complexe (plusieurs compteurs, des files ou des données dynamiques), les itérateurs sans état deviennent difficiles à utiliser. Utilisez plutôt des itérateurs à fermeture avec état ou des coroutines.

Combinaison avec table.move

Un itérateur sans état de tranche renvoie les éléments d’une tranche de table. L’état invariant contient le tableau et l’index de fin ; la variable de contrôle est l’index actuel.

Itérateurs sans état de la bibliothèque standard

ipairs, pairs (via next) et string.gmatch utilisent en interne des modèles sans état ou presque sans état.

Question sur les itérateurs sans état

Qu’est-ce qui rend un itérateur sans état ?

Récapitulatif : itérateurs sans état

Les itérateurs sans état reçoivent tout le contexte comme arguments, ne nécessitent aucune allocation de fermeture et offrent de très bonnes performances. Ils sont idéaux pour les parcours séquentiels simples, comme l’indexation d’un tableau.

Questions Fréquemment Posées

La leçon « Itérateurs sans état » est-elle gratuite ?

Oui — le texte complet de « Itérateurs sans état » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Itérateurs sans état » ?

Écrivez des itérateurs sans état comme ipairs et implémentez vos propres variantes. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Itérateurs sans état » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le protocole for générique
  2. Itérateurs sans état
  3. Itérateurs avec état et fermetures
  4. Générateurs fondés sur les coroutines
← Retour à Lua Academy