Iterador

From Wikipedia, the free encyclopedia

En programación de computadoras, un iterador se refiere al objeto que permite al programador recorrer un contenedor, (una colección de elementos) particularmente listas.[1] [2] [3]

Varios tipos de iteradores se suministran frecuentemente a través de una interfaz del contenedor. La interfaz y la semántica de un determinado iterador suelen ser fijas. Un iterador sigue una ruta y da acceso a elementos de datos del contenedor, pero no realiza iteración (es decir, no tiene total libertad, como sugiere su terminología). Un iterador se comporta como el cursor de una base de datos. Los iteradores se empezaron a utilizar en el lenguaje de programación CLU en 1974.

Iteradores externos y un patrón iterador

Un iterador externo puede ser imaginado como un tipo de puntero que tiene dos operaciones primarias: referenciar un elemento particular en la colección de objetos y modificarse para apuntar al siguiente elemento. También debe existir una manera de crear un iterador para apuntar a algún primer elemento así como alguna manera de determinar cuando el iterador ha agotado todos los elementos en el contenedor. Dependiendo del lenguaje y del uso deseado, los iteradores también pueden proporcionar operaciones adicionales o mostrar comportamientos diferentes.

El propósito primario de un iterador es permitir que un usuario procese cada elemento de un contenedor mientras aísla al usuario de la estructura interna de un contenedor. Esto permite que el contenedor almacene elementos de la manera que él desee permitiendo que el usuario trate como si fuera una simple lista o secuencia. Una clase iterador normalmente se proyecta en estrecha coordinación con la clase contenedor correspondiente. Normalmente, el contenedor proporciona los métodos para crear iteradores.

Generadores

Una manera de implementar iteradores es utilizar un tipo especial de su subrutina, conocido como un generador, que puede producir valores para quien lo llama varias veces (en lugar de devolver sólo uno).

A continuación se puede ver un ejemplo de un generador que devuelve los números de Fibonacci mediante la declaración siguiente código (en Python):

 def fibonacci():
     a, b = 0, 1
     while True:
         yield a
         a, b = b, a+b

 for numero in fibonacci():  # Utilización de generador como iterador
     print(numero)

Iteradores implícitos

Algunos lenguajes orientados a objetos como C#, Delphi (versiones más recientes), Go (lenguaje de programación), Java , Lua, Perl, Python, Ruby, ofrecen una manera intrínseca de iteración a través de elementos de un objeto contenedor sin la introducción de un objeto iterador explícito. Un objeto iterador real puede existir en realidad, pero si existe, no se expone dentro del código fuente del lenguaje.

Los iteradores implícitos se manifiestan generalmente por una declaración "foreach" (u otra equivalente), como en el siguiente ejemplo en Python:

for valor in iterable:
    print(valor)

Otras veces pueden ser creados por un objeto de la colección, como en este ejemplo en Ruby:

iterable.each do |valor|
  puts valor
end

Este estilo de iteración es llamado a veces "iteración interna" debido a que su código se ejecuta completamente dentro del contexto del objeto iterable (que controla todos los aspectos de la iteración) y el programador sólo proporciona la operación para ejecutar en cada paso (utilizando una función anónima).

Los lenguajes que soportan comprensión de lista o construcciones similares también pueden hacer uso de iteradores implícitos durante la construcción de la lista de resultados, como en Python:

nombres = [persona.nombre for persona in lista if persona.femenino]

A veces la naturaleza oculta implícita es sólo parcial. El lenguaje C++ tiene pocas plantillas de función, como for_each(), que permiten la iteración implícita similar. Sin embargo, todavía requieren objetos interactivos explícitos como su entrada inicial. Una vez inicializada la iteración subsiguiente ocurre implícitamente sin el uso continuado de cualquier objeto iterador expuesto.

En diferentes lenguajes de programación

Véase también

Referencias

Related Articles

Wikiwand AI