O benefício no dia a dia
O cliente pode percorrer resultados paginados, uma árvore ou uma coleção em memória usando um contrato de iteração. Assim, ele não precisa depender de índices ou da estrutura concreta.
Exemplo idiomático em C#
public sealed class Faixa(int inicio, int fim)
{
public IEnumerable<int> Valores()
{
for (var atual = inicio; atual <= fim; atual++)
yield return atual;
}
}
foreach (var valor in new Faixa(3, 5).Valores())
Console.WriteLine(valor);IEnumerable<T> e yield return já oferecem suporte nativo ao padrão. Iteradores podem ser lazy: exceções e leituras podem ocorrer durante a enumeração, não ao criar a sequência.
Cuidados
Defina comportamento diante de alterações concorrentes e não enumere várias vezes uma sequência que executa consultas ou produz efeitos. Use paginação quando o conjunto é grande. Compare com Composite e veja o índice dos padrões GoF.