« Patrons de conception/Itérateur » : différence entre les versions
Contenu supprimé Contenu ajouté
m →Utilisation d'un itérateur explicite : ortho |
m <source> -> <syntaxhighlight> (phab:T237267) |
||
Ligne 36 :
Dans un langage à objets comme le C#, un itérateur est un objet qui implémente l'interface IEnumerator.
<
interface IEnumerator
{
Ligne 43 :
object Current { get; }
}
</syntaxhighlight>
On utilise l'itérateur pour accéder aux valeurs disponibles.
<
IterateurTypique iterateur = new IterateurTypique ();
Ligne 55 :
Console.WriteLine(iterateur.Current);
}
</syntaxhighlight>
Une des nombreuses implémentations de l'objet possibles peut ressembler à celle-ci.
<
class IterateurTypique : IEnumerator
{
Ligne 81 :
}
}
</syntaxhighlight>
L'interface IEnumerable de C# permet le passage à un itérateur implicite.
<
interface IEnumerable
{
IEnumerator GetEnumerator();
}
</syntaxhighlight>
les tableaux, listes ou dictionnaires de C# sont des types dérivés de IEnumerable et possèdent une méthode GetEnumerator() qui appelle l'itérateur explicite.
Ligne 96 :
l'instruction foreach du C# appelle cette méthode GetEnumerator() et procède à une itération explicite tout en cachant les détails de l'implémentation.
<
if(Television is IEnumerable)
{
Ligne 104 :
}
}
</syntaxhighlight>
== Itérateurs implicites ==
Ligne 111 :
Cela est souvent implémenté par une structure de contrôle ''for-each'', comme dans les exemples suivants :
<
# Tcl: itérateur implicite
foreach val $list {
puts stdout $val
}
</syntaxhighlight>
<
# Perl: itérateur implicite
foreach $val (@list) {
print "$val\n";
}
</syntaxhighlight>
<
# Python, itérateur implicite
for Value in List:
print Value
</syntaxhighlight>
<
// PHP, itérateur implicite
foreach ($list as $value)
print $value;
</syntaxhighlight>
<
// Java, J2SE 5.0, itérateur implicite
for (Value v : list)
System.out.print(v);
</syntaxhighlight>
<
// C#, itérateur implicite
foreach (object obj in list)
Ligne 159 :
yield return tableau[i];
}
</syntaxhighlight>
<
# Ruby, itérateur de bloc, (yield)
list.each do |value|
Ligne 173 :
end
end
</syntaxhighlight>
Attention, en Javascript, on itère pas directement sur les objets mais sur leur nom
<
// Javascript, itérateur implicite
for(nom in Object)
Ligne 184 :
alert(Value+" = "+valeur ]);
}
</syntaxhighlight>
Le langage [[Programmation C++|C++]] dispose également de la fonction template <code>std::for_each()</code> qui permet des itérations implicites similaires, mais requiert toujours de fournir des objets itérateurs en paramètres d'entrée.
|