{"id":450,"date":"2024-05-24T11:43:35","date_gmt":"2024-05-24T09:43:35","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?p=450"},"modified":"2024-08-02T12:31:34","modified_gmt":"2024-08-02T10:31:34","slug":"iterables-e-iteradores-en-javascript","status":"publish","type":"post","link":"https:\/\/sutilweb.eu\/index.php\/2024\/05\/24\/iterables-e-iteradores-en-javascript\/","title":{"rendered":"Iterables e iteradores en JavaScript"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">JavaScript es un lenguaje de programaci\u00f3n din\u00e1mico y flexible que ofrece varias herramientas para gestionar colecciones de datos. Entre estas herramientas destacan los <strong>iterables<\/strong> e <strong>iteradores<\/strong>, que permiten recorrer y manipular secuencias de elementos de manera eficiente. Comprender c\u00f3mo funcionan los iterables e iteradores es esencial para escribir c\u00f3digo limpio y efectivo en JavaScript. En este art\u00edculo, exploraremos en profundidad estos conceptos, con ejemplos pr\u00e1cticos y recomendaciones de recursos adicionales para profundizar en el tema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son los Iterables?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un <strong>iterable<\/strong> es un objeto que puede ser recorrido (iterado) utilizando una estructura de control como un bucle <code>for...of<\/code>. En t\u00e9rminos m\u00e1s t\u00e9cnicos, un iterable es cualquier objeto que implementa el m\u00e9todo <code>Symbol.iterator<\/code>, el cual retorna un <strong>iterador<\/strong>. Los iterables incluyen estructuras de datos incorporadas en JavaScript como <code>Array<\/code>, <code>String<\/code>, <code>Map<\/code>, <code>Set<\/code> y m\u00e1s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplos de Iterables en JavaScript<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Array como iterable\nconst array = &#91;1, 2, 3];\nfor (const value of array) {\n  console.log(value); \/\/ 1, 2, 3\n}\n\n\/\/ String como iterable\nconst string = \"Hello\";\nfor (const char of string) {\n  console.log(char); \/\/ H, e, l, l, o\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son los Iteradores?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un <strong>iterador<\/strong> es un objeto que define un m\u00e9todo <code>next()<\/code>, el cual devuelve un objeto con dos propiedades: <code>value<\/code> (el pr\u00f3ximo valor en la secuencia) y <code>done<\/code> (un booleano que indica si la iteraci\u00f3n ha terminado). Los iteradores permiten acceder a los elementos de un iterable uno a uno, facilitando un control m\u00e1s preciso sobre el proceso de iteraci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo de un Iterador en JavaScript<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>const iterable = &#91;1, 2, 3];\nconst iterator = iterable&#91;Symbol.iterator]();\n\nconsole.log(iterator.next()); \/\/ { value: 1, done: false }\nconsole.log(iterator.next()); \/\/ { value: 2, done: false }\nconsole.log(iterator.next()); \/\/ { value: 3, done: false }\nconsole.log(iterator.next()); \/\/ { value: undefined, done: true }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo Crear Iterables Personalizados<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crear tus propios iterables en JavaScript es relativamente sencillo. Solo necesitas implementar el m\u00e9todo <code>Symbol.iterator<\/code> que retorne un iterador.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo de un Iterable Personalizado<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>const customIterable = {\n  &#91;Symbol.iterator]() {\n    let step = 0;\n    return {\n      next() {\n        step++;\n        if (step &lt;= 5) {\n          return { value: step, done: false };\n        }\n        return { value: undefined, done: true };\n      }\n    };\n  }\n};\n\nfor (const value of customIterable) {\n  console.log(value); \/\/ 1, 2, 3, 4, 5\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Generadores: Una Forma Conveniente de Crear Iteradores<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los <strong>generadores<\/strong> son una caracter\u00edstica especial de JavaScript que facilita la creaci\u00f3n de iteradores. Un generador es una funci\u00f3n especial que puede pausar su ejecuci\u00f3n y luego reanudarla, permitiendo producir una secuencia de valores en el tiempo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo de un Generador<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>function* generator() {\n  yield 1;\n  yield 2;\n  yield 3;\n}\n\nconst gen = generator();\nconsole.log(gen.next()); \/\/ { value: 1, done: false }\nconsole.log(gen.next()); \/\/ { value: 2, done: false }\nconsole.log(gen.next()); \/\/ { value: 3, done: false }\nconsole.log(gen.next()); \/\/ { value: undefined, done: true }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Comparaci\u00f3n entre Iterables e Iteradores<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Caracter\u00edstica<\/th><th>Iterable<\/th><th>Iterador<\/th><\/tr><\/thead><tbody><tr><td>Implementaci\u00f3n<\/td><td><code>Symbol.iterator<\/code><\/td><td><code>next()<\/code><\/td><\/tr><tr><td>Uso<\/td><td><code>for...of<\/code><\/td><td>Control manual<\/td><\/tr><tr><td>Ejemplo<\/td><td><code>Array<\/code>, <code>String<\/code><\/td><td>Generadores, objetos personalizados<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Comprender y utilizar <strong>iterables<\/strong> e <strong>iteradores<\/strong> en JavaScript te permitir\u00e1 manejar colecciones de datos de manera m\u00e1s efectiva y escribir c\u00f3digo m\u00e1s limpio y legible. Los iterables proporcionan una forma sencilla de recorrer secuencias de datos, mientras que los iteradores ofrecen un control preciso sobre el proceso de iteraci\u00f3n. Los generadores, por su parte, son una herramienta poderosa para crear iteradores de manera conveniente y eficiente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recursos Adicionales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Libros Recomendados<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/eloquentjavascript.net\/\">Eloquent JavaScript<\/a> por Marijn Haverbeke<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/getify\/You-Dont-Know-JS\">You Don&#8217;t Know JS Yet<\/a> por Kyle Simpson<\/li>\n\n\n\n<li><a>JavaScript: The Good Parts<\/a> por Douglas Crockford<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">P\u00e1ginas Web Recomendadas<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Iteration_protocols\">MDN Web Docs: Iteration protocols<\/a><\/li>\n\n\n\n<li><a>JavaScript.info: Iterables<\/a><\/li>\n\n\n\n<li><a>w3schools: JavaScript Iterators<\/a><\/li>\n\n\n\n<li><a>GeeksforGeeks: JavaScript Iterators<\/a><\/li>\n\n\n\n<li><a>FreeCodeCamp: Understanding JavaScript Iterators<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n JavaScript es un lenguaje de programaci\u00f3n din\u00e1mico y flexible que ofrece varias herramientas para gestionar colecciones de datos. Entre estas herramientas&#8230;<\/p>\n","protected":false},"author":1,"featured_media":454,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[1],"tags":[7,8,5,6],"class_list":["post-450","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lenguajes-de-programacion","tag-como-usar-iterables-en-javascript","tag-ejemplos-de-iteradores-en-javascript","tag-iterables-en-javascript","tag-iteradores-en-javascript"],"uagb_featured_image_src":{"full":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores.webp",1792,1024,false],"thumbnail":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores-150x150.webp",150,150,true],"medium":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores-300x171.webp",300,171,true],"medium_large":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores-768x439.webp",768,439,true],"large":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/05\/Iterables-e-iteradores.webp",1792,1024,false]},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Introducci\u00f3n JavaScript es un lenguaje de programaci\u00f3n din\u00e1mico y flexible que ofrece varias herramientas para gestionar colecciones de datos. Entre estas herramientas...","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts\/450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=450"}],"version-history":[{"count":3,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts\/450\/revisions"}],"predecessor-version":[{"id":453,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts\/450\/revisions\/453"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media\/454"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/categories?post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/tags?post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}