« Patrons de conception/Itérateur » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
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.
 
<sourcesyntaxhighlight lang=csharp>
interface IEnumerator
{
Ligne 43 :
object Current { get; }
}
</syntaxhighlight>
</source>
 
On utilise l'itérateur pour accéder aux valeurs disponibles.
 
<sourcesyntaxhighlight lang=csharp>
IterateurTypique iterateur = new IterateurTypique ();
 
Ligne 55 :
Console.WriteLine(iterateur.Current);
}
</syntaxhighlight>
</source>
 
Une des nombreuses implémentations de l'objet possibles peut ressembler à celle-ci.
 
<sourcesyntaxhighlight lang=csharp>
class IterateurTypique : IEnumerator
{
Ligne 81 :
}
}
</syntaxhighlight>
</source>
 
L'interface IEnumerable de C# permet le passage à un itérateur implicite.
 
<sourcesyntaxhighlight lang=csharp>
interface IEnumerable
{
IEnumerator GetEnumerator();
}
</syntaxhighlight>
</source>
 
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.
 
<sourcesyntaxhighlight lang=csharp>
if(Television is IEnumerable)
{
Ligne 104 :
}
}
</syntaxhighlight>
</source>
 
== Itérateurs implicites ==
Ligne 111 :
Cela est souvent implémenté par une structure de contrôle ''for-each'', comme dans les exemples suivants :
 
<sourcesyntaxhighlight lang="tcl">
# Tcl: itérateur implicite
foreach val $list {
puts stdout $val
}
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="perl">
# Perl: itérateur implicite
foreach $val (@list) {
print "$val\n";
}
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="python">
# Python, itérateur implicite
for Value in List:
print Value
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="php">
// PHP, itérateur implicite
foreach ($list as $value)
print $value;
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="java">
// Java, J2SE 5.0, itérateur implicite
for (Value v : list)
System.out.print(v);
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="csharp">
// C#, itérateur implicite
foreach (object obj in list)
Ligne 159 :
yield return tableau[i];
}
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="ruby">
# Ruby, itérateur de bloc, (yield)
list.each do |value|
Ligne 173 :
end
end
</syntaxhighlight>
</source>
 
Attention, en Javascript, on itère pas directement sur les objets mais sur leur nom
 
<sourcesyntaxhighlight lang="javascript">
// Javascript, itérateur implicite
for(nom in Object)
Ligne 184 :
alert(Value+" = "+valeur ]);
}
</syntaxhighlight>
</source>
 
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.