Esta es una curiosidad que noté tras intentar aprender como se hace un bucle for each en otros lenguajes aparte de los que conozco. Es interesante notar que hay lenguajes que tardaron décadas en implementarlo y otros que lo hicieron apenas nacieron, así que hoy hago un análisis de lo que aprendí al respecto.
Introducción
El bucle for each es una estructura de control que permite recorrer colecciones (como listas, arrays o mapas) de forma sencilla y legible. A diferencia del clásico for, no requiere índices ni condiciones explícitas: simplemente ejecuta una acción para cada elemento de la colección.
En lenguaje natural: “Para cada elemento en esta colección, haz esto”.
Si bien no es de las estructuras mas básicas que se enseñan en fundamentos de programación, porque es solo otra forma del bucle for, es una de las primeras cosas que se aprenden al usar arreglos y vectores debido a que, por lo general, es una herramienta nativa que se recomienda su uso.
Cada lenguaje de programación tiene su propia implementación utilizando sus propios métodos para lograr este barrido de colecciones, por lo que puede darse el caso de que el bucle for no se llame igual en todos. Así, tenemos por ejemplo, Javascript, el lenguaje que mas uso, que si cuenta con un método for each
const numeros
= [
1,
2,
3,
4,
5];numeros.forEach(
function(numero) { console.log(numero);});
Mientras que en java, no hay un for each propiamente dicho, sino que usan un bucle for que actúa como el foreach de javascript
String
[] nombres
= {
"Sophie",
"Tim",
"Anna",
"John",
"Melissa"};
for (String nombre : nombres) { System.
out.
println(nombre);}
Cronología de la aparición del bucle for each y equivalentes
Uno de mis primeros errores fue creer que python seria de los primeros en implementar este bucle, pero resulta que lo hizo después de javascript, siendo que python lo hizo en el 2001 y javascript lo hizo en 1995. Pero esto me hizo incurrir en otro error. vamos viendo esta linea de tiempo para entender la situación:
Fecha de aparición Métodos de bucle Notas Lisp1958
mapcar, dolist
Primer lenguaje con estructuras funcionales para iterar.
ada horizon1983
for...of
Iteración sobre arrays y rangos.
C++1985
Desde C++11:
for (auto x : container)
Introducido oficialmente en C++11.
Java1995
for (Type item : collection) Añadido en 2004 con Java 5.
PHP1995
foreach ($array as $value)
Introducido en PHP 4 (2000)
Javascript1995
array.forEach() Método de array desde ECMAScript 5 (2009).
C#2000
foreach (var item in collection)
Parte del lenguaje desde su primera versión
Python2001
for item in iterable:
Aunque no usa
foreach
, su
for
actúa como tal.
Ruby2003
collection.each do |item|
Iteración elegante con bloques.
Go2009
for _, value := range collection
Iteración con
range
.
Swift2014
for item in collection
Sintaxis similar a Python.
Esta tabla es interesante por cuanto al ver los años en los que apareció por primera vez este bucle, puede dar una falsa impresión de innovación temprana/atraso de progreso, debido a que, por ejemplo, Lisp, en 1958 ya tenia su primer implementación de su propia versión de bucle for each, mientras que swift recién la implementaba por el año 2014. Es por esto que preparé otra linea del tiempo que permitiría entender mejor estas cronologías.
Lapso de tiempo en el que se adoptó el bucle For Each desde el nacimiento del lenguaje de programación
👆Tremendo titulazo. Ojala el SEO no me putee.
Bueno, esta cronología traerá sorpresas, puesto que hay lenguajes que son considerados modernos pero que tardaron realmente un montón en implementar algo que ya consideramos común en estos días. Los lenguajes de programación que empezaron a aparecer desde el año 2014 en adelante, ya traían esa implementación desde sus orígenes, así que podríamos poner una tasa de adopción inmediata para ellos, a pesar de que Lisp fue de los primeros en hacerlo ya por el 1958.
Año de Creación Año de Implementación Tiempo Transcurrido Notas Lisp1958
1958
0 años
Desde el inicio con
mapcar y dolist
ada horizon1983
1983
0 años
for ... ofdisponible desde el diseño inicial.
C++1985
2011
26 años
introducido en C++11.
Java Logo1995
2004
9 años
añadido en Java 5.
PHP1995
2000
5 años
introducido en PHP 4.
Javascript1995
2009
14 años
forEach()como método de array en ECMAScript 5.
C#2000
2000
0 años
foreachincluido desde la primera versión.
Python1991
1991
0 años
Su
foractúa como
foreachdesde el inicio.
Ruby1995
1995
0 años
eachdisponible desde el comienzo.
Go2009
2009
0 años
rangeincluido desde el diseño inicial.
Swift Logo2014
2014
0 años
for-indisponible desde el inicio.
Observaciones interesantes
He creado esta lista con los lenguajes de programación mas populares y de los cuales se algo, pero se notan estas curiosidades por cuanto lenguajes funcionales o modernos como Lisp, Python, Ruby y Swift nacieron con estructuras similares a foreach, mientras que lenguajes más antiguos o de sistemas como C++ tardaron décadas en adoptar una sintaxis más expresiva. En lenguajes como JavaScript, el for each no es una construcción del lenguaje sino un método de objeto, lo que influye en su rendimiento y flexibilidad.
Algunos ejemplos de uso del bucle For Each
Ya que estamos con estas, vamos viendo unos cuantos ejemplos de lenguajes de programación y sus correspondientes implementaciones de bucles For Each. Por supuesto son ejemplos muy simplificados, así que no constan la declaración de variables y otras cosas más.
🔹 C#
Utiliza foreach para nombrar su bucle
foreach (
var item
in lista) { Console.WriteLine(item);}
🔹 Java
Mediante un selector de fila por columna, utilizaa el for clasico en lugar de tener un for each dedicado
for (String nombre : nombres) { System.
out.
println(nombre);}
Otro ejemplo mas moderno que si usa el for each en Java
List
<String
> nombres
= Arrays.
asList(
"Ana",
"Luis",
"María",
"Pedro"); nombres.
forEach(nombre
-> { System.
out.
println(
"Hola, " + nombre); });
🔹 JavaScript
El primer lenguaje en el que aprendí a usar este metodo 😀
nombres.forEach(
function(nombre) { console.log(nombre);});
🔹 Python
Al igual que Java, no tiene un for each aparte.
for nombre
in nombres:
print(nombre)
🔹 PHP
Utiliza el for each como un método separado de for
foreach ($nombres as $nombre) { echo $nombre;}
Funcionamiento interno de los bucles en sus respectivos lenguajes de programación
Cada lenguaje de programación juzga y decide apropiado utilizar una implementación de for each de acuerdo a su propia ideología y objetivos. Por esta razón, es muy diferente como funcionan de forma interna a pesar de que de forma externa, puedan parecerse mucho entre si.
🔹 C#
Implementación:
foreach se basa en la interfaz IEnumerable y su método GetEnumerator(), que devuelve un enumerador con los métodos MoveNext() y Current.
- Ventaja: Muy legible y seguro (no hay errores de índice).
- Desventaja: Puede ser más lento que
for en arrays simples, ya que implica llamadas a métodos y boxing en algunos casos.
🔹 Java
Implementación: Usa internamente un Iterator sobre colecciones que implementan Iterable.
- Ventaja: Evita errores de índice y es más limpio.
- Desventaja: No permite modificar la colección durante la iteración (lanza
ConcurrentModificationException).
Actualización:
Un lector hace este aporte:
El iterator ya quedo muy viejo, no se usa mas, aunque se puede encontrar en proyectos legacy.
// Array de StringsString
[] miArray
= {
"manzana",
"banana",
"cereza"};
// Convertir el array a una listaList
<String
> miLista
= Arrays.
asList(miArray);
// miLista ahora contiene los mismos elementos que miArraySystem.
out.
println(miLista);
// Salida: [manzana, banana, cereza]// Modificar un elemento en la listamiLista.
set(
1,
"arándano");
// El array original también se ha modificadoSystem.
out.
println(Arrays.
toString(miArray));
// Salida: [manzana, arándano, cereza] 🔹 JavaScript
Implementación: forEach() es un método de los arrays que toma una función callback.
- Ventaja: Muy expresivo y funcional.
- Desventaja: No se puede usar
break o continue, lo que limita el control del flujo.
🔹 Python
Implementación: El for actúa como un foreach , usando internamente el protocolo de iteradores ( __iter__() y __next__()).
- Ventaja: Muy flexible y elegante.
- Desventaja: Ligeramente más lento que un bucle con índices en listas grandes si se requiere acceso posicional.
🔹 C++ (desde C++11)
Implementación: El bucle for (auto x : container) usa internamente begin() y end() del contenedor.
- Ventaja: Limpio y moderno.
- Desventaja: Puede generar copias innecesarias si no se usa referencia (
auto&).
🔹 PHP
Implementación: foreach es una construcción del lenguaje que itera sobre arrays y objetos.
- Ventaja: Muy simple de usar.
- Desventaja: Puede duplicar internamente el array si se modifica durante la iteración.
Comparativas de rendimientos del bucle for each segun los lenguajes de programación
Según una prueba de rendimiento publicada por Andrea314, los resultados varían según el lenguaje y el tipo de colección:
LenguajeFor Clasico For Each Observaciones C#C#
Más rápido en arrays
Más lento en arrays, similar en listas
incurre en overhead por enumeradores
JavaSimilar rendimiento
Similar rendimiento
Diferencias mínimas, depende del JIT
JavaScriptMás rápido
Más legible pero más lento
forEach tiene overhead por función callback
PythonCon índices más rápido
Estilo foreach más legible
Diferencia pequeña
C++Con índices más rápido
Range-based for más limpio
Cuidado con copias innecesarias
PHPMenos usado
Más rápido y preferido
foreach está optimizado para arrays
Conclusiones
Como programadores no necesitamos preocuparnos la gran cosa al utilizar estos métodos, a menos que necesitemos algo en especifico. Las diferencias de rendimiento entre un for y un for each son mínimas en la practica y solo serian apreciables en equipos limitados o grandes volúmenes de datos. Utiliza preferentemente cualquier implementación de for each y solo estudia alternativas si necesitas optimizar tu código.
He escrito este artículo al darme cuenta de que hay muchas cosas que no se y que doy por sentado. Esta bien repasar la historia de los lenguajes de programación y sus particularidades para tener un mayor panorama y entender mejor el mundo de la programación.
(Ya si estas apurado porque necesitas trabajar o hacer una tarea o proyecto, repasa todo superficialmente. Lo harás de todas formas. Pero te aconsejo que siempre repases las bases. Te hará la vida mas fácil mas adelante)
Notas sobre el Artículo
He usado la inteligencia artificial de Copilot para algunas aclaraciones, pero en su mayoría ha sido posible obtener estos datos desde la propia documentación públicamente disponible.
Articulo de Mozilla para forEach
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julio de 2015.
https://www.luisllamas.es/programacion-bucles/
Los bucles son estructuras de control que permiten repetir un conjunto de instrucciones varias veces. Junto con los condicionales, son dos de las herramientas más importantes a la hora de programar.
Por cierto, no conocía el sitio de Luis Llamas hasta escribir este articulo, pero esta muy bonito. Lo he agregado a mi lector de RSS.
https://drupalsapiens.com/es/blog/php/historial-y-cronologia-de-versiones-php
PHP 5
Características más relevantes
[…]Añadidos los Iteradores, interfaces que permiten personalizar los bucles foreach.[…]
Es posible encontrar información de esto en el changelog del propio proyecto PHP también
https://www.php.net/manual/en/control-structures.foreach.php
(PHP 4, PHP 5, PHP 7, PHP 8)
The foreach construct provides an easy way to iterate over arrays and Traversable objects. foreach will issue an error when used with a variable containing a different data type or with an uninitialized variable.
https://www.andrea314.eu/es/prueba-de-rendimiento-para-iteraci%C3%B3n-con-for-y-foreach.html
Tremendo articulo comparando el rendimiento al detalle de los bucles for each!
https://en.wikipedia.org/wiki/Foreach_loop
Como siempre, la wikipedia en inglés tiene más información y más detallada
C++11 range-based for statements have been implemented in GNU Compiler Collection (GCC) (since version 4.6), Clang (since version 3.0) and Visual C++ 2012 (version 11)
He usado un código css para los blockquotes que he implementado en mi plantilla, así que cito de donde lo tomé también. Hice unas cuantas modificaciones para poder utilizarlo aquí en WordPress.
https://interlan.ec/2025/11/21/articulo-el-bucle-for-each/
#articulo #bucles #cronologia #curiosidades #lineaDelTiempo #programaacion