Los tres lenguajes tienen for, pero cada uno lo entiende a su manera. Java tiene dos formas, Go usa una sola palabra para todos los bucles, y en Python el for siempre recorre algo. Los comparamos con ejemplos ejecutados en los tres.
También te puede interesar
Java: el for clásico y el de recorrido
public class CicloFor {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println("valor de i: " + i);
}
String[] lenguajes = {"Java", "Go", "Python"};
for (String l : lenguajes) {
System.out.println(l);
}
for (int i = 0, j = 10; i < j; i += 3, j -= 3) {
System.out.println(i + " " + j);
}
}
}java CicloFor.javavalor de i: 0 valor de i: 1 valor de i: 2 Java Go Python 0 10 3 7
El primero es el for heredado de C: una inicialización, una condición que se comprueba antes de cada vuelta y un incremento que se ejecuta al final de cada una. El segundo, el «for mejorado», recorre un arreglo o cualquier colección sin índice. El tercero recuerda que cada una de las tres partes puede tener varias expresiones separadas por comas.
Go: una sola palabra para todos los bucles
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
fmt.Println("valor de i: ", i)
}
for i := range 3 {
fmt.Println("range:", i)
}
lenguajes := []string{"Java", "Go", "Python"}
for i, l := range lenguajes {
fmt.Println(i, l)
}
n := 1
for n < 100 {
n *= 3
}
fmt.Println("primera potencia de 3 mayor que 100:", n)
for {
fmt.Println("una vez y fuera")
break
}
}go run .valor de i: 0 valor de i: 1 valor de i: 2 range: 0 range: 1 range: 2 0 Java 1 Go 2 Python primera potencia de 3 mayor que 100: 243 una vez y fuera
Go no tiene while ni do: todo se escribe con for. Con tres partes es el clásico, sin paréntesis. Con solo la condición, hace de while. Sin nada es un bucle infinito, del que se sale con break. Y con range recorre colecciones devolviendo el índice y el valor. Desde Go 1.22, range también acepta un número: for i := range 3 da 0, 1 y 2.
valor de i: 0. fmt.Println pone un espacio entre cada argumento, y el texto ya terminaba en espacio. En Go se escribe fmt.Println("valor de i:", i), sin el espacio final.Python: siempre recorre algo
for i in range(3):
print("valor de i: ", i)
for i in range(3):
print("valor de i:", i)
lenguajes = ["Java", "Go", "Python"]
for i, l in enumerate(lenguajes):
print(i, l)
for i in range(10, 0, -3):
print(i, end=" ")
print()
for l in lenguajes:
if l == "Rust":
break
else:
print("no había Rust")python ciclo.pyvalor de i: 0 valor de i: 1 valor de i: 2 valor de i: 0 valor de i: 1 valor de i: 2 0 Java 1 Go 2 Python 10 7 4 1 no había Rust
En Python no hay for con contador: se recorre una secuencia, y range genera los números. range(10, 0, -3) cuenta hacia atrás de tres en tres, y enumerate da el índice junto a cada elemento. El primer print tiene el mismo doble espacio que Go, por el mismo motivo: print separa sus argumentos con un espacio.
Lo exclusivo de Python es el else del for: se ejecuta solo si el bucle terminó sin break. Sirve para búsquedas como esta, donde llegar al final significa que no se encontró nada.
Lado a lado
| Java | Go | Python | |
|---|---|---|---|
| Contar de 0 a 9 | for (int i = 0; i < 10; i++) | for i := 0; i < 10; i++ o for i := range 10 | for i in range(10): |
| Recorrer una colección | for (String l : lista) | for _, l := range lista | for l in lista: |
| Con índice | el for clásico | for i, l := range lista | for i, l in enumerate(lista): |
| Mientras se cumpla algo | while (cond) | for cond | while cond: |
| Infinito | while (true) | for | while True: |
| Bloque | llaves | llaves, obligatorias | sangría |
Lo que cambia por debajo
La versión anterior de esta entrada decía que Java es un lenguaje interpretado, como Python. No es exacto, y la diferencia explica buena parte de la diferencia de velocidad. Java se compila a bytecode, y la máquina virtual compila a código máquina, mientras el programa se ejecuta, las partes que más se usan. Go se compila directamente a un ejecutable nativo. Python, en su implementación habitual, también compila a bytecode, pero lo interpreta instrucción a instrucción, y por eso un bucle con mucho cálculo suele ir bastante más despacio. Para medirlo bien, mira medir el rendimiento en Java.
Entrada publicada en 2020 y revisada en octubre de 2026. Cada ejemplo se ejecutó en un contenedor limpio con Java 25 LTS, Go 1.25 y Python 3.14; las salidas están copiadas de esa ejecución.