Bucles en Julia (4ª parte – ¡Hola Julia!)

Publicado el 23 julio 2020 por Daniel Rodríguez @analyticslane

Hoy vamos a como implementar bucles en Julia y la selección con switch. Los bucles que podemos implementar en Julia, al igual que en el resto de los lenguajes, son básicamente dos for y while. Aunque ya hemos visto el segundo en la entrada anterior.

Los bucles for en Julia

Al igual que nos suele en otras ocasiones la sintaxis de los bucles for en Julia es similar a la de Matlab. Simplemente se escribe la palabra for, seguida de una variable, el comando in o = y los valores sobre los que se desea iterar. Escribiendo el primero, dos puntos y el último. Remitiéndose el código que se escriba hasta que se encuentre el comando end. Así para imprimir los números de 1 a 10 solamente se tiene que escribir.

for i in 1:10
    println(i)
end

En Julia se puede escoger entre usar in o = entre la variable y los valores sobre los que se itera. Aunque es aconsejable usar in. Por otro lado, si se quiere iterar en pasos diferentes, solamente se tiene que indicar los pasos entre el primer y el último valor. Así para escribir los números entre 1 y 10 de cuatro en cuatro se puede usar el siguiente comando.

for i in 1:4:10
    println(i)
end

Los valores sobre los que se desea iterar no tienen porque estar ordenados, sino que pueden indicar en un vector fácilmente.

for i in [1, 4, 2]
    println(i)
end

El bucle for no tiene porque iterar sobre números, también lo puede hacer sobre cadenas de texto, evaluando en cada uno de los pasos un carácter. Por ejemplo, se pueden escribir los carates de la palabra hola con el código

for i in "Hola"
    println(i)
end

Una cosa importante para los usuarios que vienen de Matlab es que la variable i que se usa en el bucle no está definida fuera de el. Esto es, si llamamos a i tendremos un error ya que Julia nos dirá que i no esta definido. Algo que nos puede dar una pista de cómo gestiona el alcance de las variables Julia.

Los bucles while en Julia

Otra de las estructuras más utilizadas para iterar sobre valores es while. El este caso el código se repite mientras se cumpla una condición. La forma básica de este comando es escribir while seguido de una condición lógica. En caso de que esta sea cierta se ejecuta el código hasta que se encuentra la palabra reservada end. Por otro lado, en el caso de que no sea cierta se sigue con el programa después del end. Por ejemplo, para imprimir los números entre 1 y 10 se puede hacer con

i = 0
while i < 10
    println(i+=1)
end

En este caso se inicializa la variable i a 0. En el bucle while se comprueba si i es menor que 10, en el primer caso es afirmativo, por lo que se ejecuta el código de impresión. En este se aumente cada vez un valor 1 antes de imprimir por pantalla, por lo que el primer resultados será 1.

A continuación, se vuelve a comprobar si el valor de i es menor de 10, cómo continúa siendo cierto, se vuelve a ejecutar el código. Lo que se repite 10 veces hasta que i es igual a 10.

Es importante recordar que en los bucles while es necesario actualizar el valor de la variable o variables empleadas en la comprobación durante la ejecución. Tanto sea de forma algorítmica como leyendo la información de otras fuentes. Ya que en caso contrario el código terminará en un bucle infinito. Lo que no es lo deseable en la mayoría de los casos.

En otros lenguajes existe una estrucutra que generalmente se llama do...while en la que siempre se ejecuta una vez el código. Algo que actualmente no soporta Julia de forma nativa.

Saliendo de los bucles break y continue

Hay dos comandos con los que es posible modificar el comportamiento de tanto de los bucles for como while: break y continue. El comando break para la ejecución del código dentro del los bucles y continúa con la ejecución después de estos. Por ejemplo:

for i in 1:10
    if i > 5
        break;
    end
    println(i)
end

Este código solamente imprime los valores entre 1 y 5, no ente 1 y 10. Porque una vez que el valor de i es 6 mediante break se le indica a Julia que no es necesario continuar evaluando el bucle.

Por otro lado continue lo que hace es detener la ejecución de la iteración actual, pero continúa en el siguiente valor. Por ejemplo, el siguiente código imprime solamente los valores entre 5 y 10.

for i in 1:10
    if i < 5
        continue;
    end
    println(i)
end

El uso de continue evita que se evalúe el comando println cuando i es menor que 5, pero el bucle no se interrumpe.

Es importante saber que tanto break como continue se pueden usar también en los bucles while.

Anidando bucles for y while

Como en otros lenguajes no existe ningún problema para incluir un bucle for dentro de otro o de uno while. Aplicando lo mismo para los while. Julia sabrá reconocer que end corresponde con que for o while

for i in 1:10
    for j = 1:10
        println(i, j)
    end
end

Una cosa curiosa, aunque no sea recomendable, es que podemos usar el mismo nombre de variable en el bucle for anidado dentro de otro. En ningún momento Julia confundida el valor de los dos. Aunque nosotros sí que nos podamos confundir.

for i in 1:2
    println("for 1 ", i)
    for i = 1:2
        println("for 2 ", i)
    end
end

Los bucles en Julia

Tras esta introducción a los bucles en Julia podemos ver que no son muy diferentes a los que tenemos en Matlab, R o Python. Aunque existan diferencias en cuanto al alcance de las variables. No es posible acceder a las variables que se usan dentro de un bucle for fuera de ellos. Lo que permite que dos bucles anidados tengan la misma variable sin que esto genere problemas (para Julia no para los usuarios que puedan revisar en código así escrito).