Em ciência da computação, um gerador (em inglês, generator) é um procedimento especial que pode ser usado para controlar iteradores de loops. Um gerador é muito similar para funções que retornam arrays (ou vetores), geradores podem ter parâmetros, que também podem ser chamados e geram uma sequência de valores. Entretanto, em vez de construir uma sequência que contenha todos os valores e os retornam de uma só vez, um gerador utiliza a palavra-chave yield para retornar os valores um de cada vez, que utiliza menos memória e permite o processamento de poucos valores rapidamente. Um gerador é uma função mas comporta-se como um iterador.
As primeiras aparições de geradores foram na CLU em 1975, [1] e atualmente são encontrados facilmente em softwares em linguagem de programação Python e C#. (em CLU e C# generators são chamados de iteradores).
Geradores são usualmente utilizados dentro de loops nas funções, que podem reduzir de grandes e demorados loops para únicos loops e rápidos.
Um exemplo de gerador em Python:
def contador(n):
while True:
yield n
n += 1
for i in contador(10):
if i <= 20:
print i
else:
break
Em Python, um gerador pode ser pensado como um iterador que contém uma pilha. Sempre que é usado um iterador o método do next()
é chamado, e é executado normalmente até o próximo yield
ser alcançado. O gerador é congelado então outra vez, e o valor yield é retornado a quem o chamou. Os geradores computam seus valores yield somente por demanda, são úteis para representar as seqüências que são de difícil processamento pelo computador.
Ver também
- List comprehension para outras construções de sequências de valores.
- Design pattern de software.