Patrón iterador, ¿cómo funciona?

Поділитися
Вставка
  • Опубліковано 17 гру 2024

КОМЕНТАРІ • 12

  • @makigas
    @makigas  3 місяці тому

    Consulta notas del vídeo y pseudocódigos adicionales en www.makigas.es/v/0jfclzSqsVk
    Aprende más patrones y principios en www.makigas.es/videos?tag=patrones
    Pregunta cualquier duda que tengas en los comentarios o en foro.makigas.es

  • @ddutra
    @ddutra Рік тому +1

    Una clase d Iterador e Algoritmo en el mismo video! Parabéns! 👏🏽👏🏽👏🏽👏🏽

  • @kele5783
    @kele5783 Рік тому

    Eaaa, ya salgo en la lista de miembros!!!

  • @andrespodadera5874
    @andrespodadera5874 Рік тому +1

    Gracias por vídeo Makigas, muy interesante. Dos cosas que me han pasado manejando iteradores. La primera es que una vez que llames a next() si sabes que vas a necesitar ese valor en el futuro, debes guardarlo en una variable ya que si usas next() de nuevo para consultar su valor, este ya no será next() sino next() x2. Segundo, no conozco forma de mover hacia atrás el cursor del iterador, es decir, si mientras iteras una colección quieres volver al principio de la colección la única forma que conozco es volver a declarar el iterador. Supongo que como todo en la vida, tiene sus cosas buenas y sus cosas no tan buenas. Saludos

    • @makigas
      @makigas  Рік тому

      Así es, una de las desventajas de los iteradores es que solo van hacia adelante salvo que la implementación tenga algo especial que lo soporte, pero lo único que es obligatorio es el salto adelante. Lo del next() cuadra con como funciona, cada vez que se le llama pasa al siguiente, nunca devuelve dos veces lo mismo. Hay que ir dejando los elementos por ahí.

  • @gatonauta79
    @gatonauta79 Рік тому +1

    Excelente video, este tipo de iteradores son los llamados externos? Ya sea o no, que diferencia habría en la implementación con iterador interno.

    • @makigas
      @makigas  Рік тому +1

      Sí, es el externo

    • @makigas
      @makigas  Рік тому

      Y luego, la diferencia fundamentalmente estaría que el externo te da la referencia al iterador y lo puedes manipular tal cual; el interno no lo tocas, por ejemplo un forEach() solamente pide la función, pero no da la referencia tal cual

  • @florentinobajo
    @florentinobajo Рік тому

    Mu buena explicacion. +1

  • @victormoralesperez799
    @victormoralesperez799 Рік тому

    Muy buen vídeo. A mi particularmente me queda la duda de , por ejemplo en lenguaje Java, que tipo de operación se hace detrás de bambalinas para que cuando estás mutando una colección a la vez que la recorres con un iterator (mutar la colección como tal, no su contenido, eliminar un elemento mientras la recorres, voy al grano...), que ocurre "under the hood" para que no salte el tipo de excepción que salta cuando la estás recorriendo con una estructura que no sea un iterator 😂... Y como al eliminar un elemento del iterator, dicha operación se replica en la colección como si estuvieran ligadas... No sé si me explico

    • @makigas
      @makigas  Рік тому

      Diría que la "trampa" está que el iterator de Java tiene en su interfaz un método propio llamado remove() para cuando se quiere borrar, y que por eso sabe cómo tratar un borrado sin que se rompa el iterador.

    • @victormoralesperez799
      @victormoralesperez799 Рік тому

      @@makigas
      Claro. Igualmente lo tiene la colección, en el caso de Java, una implementación de Lista con ArrayList, por ejemplo, la tiene también. Pero si iteras una colección con un bucle for clásico o incluso un for-each, si intentas eliminar un elemento, salta una excepción de tipo ConcurrentModificationException. Mientras que usando un iterator esto no ocurre. Ahí es donde el cómo lo hace empieza a ser auténtica magia negra para mí (que seguro que tiene una explicación que desconozco y nunca he sabido encontrar)