Generador (informática)
En programación, un generador es una rutina especial que se puede usar para controlar el comportamiento de un iterador en un bucle. Un generador es muy similar a una función que devuelve un vector, en el que un generador tiene los parámetros que se pueden llamar, y genera una secuencia de valores.
La manera más simple de conseguir una secuencia de datos es declarando un array o vector declarando manualmente cada valor. Esta práctica puede volverse tediosa y consumir mucho tiempo al desarrollador si el array o vector requiere que existan una gran cantidad de elementos dentro de él. En ese caso un generador resulta ser una manera más rápida de declarar el array o vector.
Otra gran ventaja de los generadores radica en que consume una menor cantidad de recursos en memoria, por lo tanto, permite que quien lo llama comience a procesar los primeros valores inmediatamente. En resumen, un generador se asemeja a una función pero se comporta como un iterador.
Los generadores pueden implementarse en construcciones de control de flujo más expresivas, como la continuación de objetos de primera clase o como co-funciones.
Los generadores aparecen por primera vez en 1975 en el lenguaje CLU; y están disponibles en Python, C#, JavaScript, [Ruby] y en otros lenguajes. En CLU y C#, los generadores se llaman iteradores y en Ruby enumeradores.
Python[editar]
Un ejemplo de generador en Python:
def countfrom(n): while True: yield n n += 1 # Ejemplo: mostrar los enteros entre 10 y 20. # Hay que tener en cuenta que esta iteración normalmente termina, # aunque el countfrom() se escriba como un bucle infinito. for i in countfrom(10): if i <= 20: print(i) else: break # Otro generador, que produce los primeros números primos # a "to" si a> = 2, de lo contrario indefinidamente dependiendo de la necesidad. def primos (to): yield 2 # primer número primero, y único par n = 3 p = [] while n <= to or to < 2: sqr_n = int(n**0.5) if not any(n%f == 0 for f in p if f <= sqr_n): # funciona desde Python 2.5 con el paquete NumPy que introduce any() yield n p.append(n) n += 2 # Sólo revisar impares raise StopIteration
Ruby[editar]
Ruby soporta generadores (a partir de la versión 1.9) en la clase Enumerator.
# Generador de un objeto enumerable chars = Enumerator.new(['A', 'B', 'C', 'Z']) 4.times { puts chars.next } # Generatore de un bloque count = Enumerator.new do|yielder| i=0 loop{ yielder.yield i += 1} end 100.times { puts count.next }
Véase también[editar]
- Portal:informática. Contenido relacionado con informática.