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
owhile
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).
Publicaciones de la serie ¡Hola Julia!
- ¡Hola Julia!
- Primeros pasos con Julia
- Cadenas de texto en Julia
- Bucles en Julia
- Funciones en Julia
- Vectores, tuplas y diccionarios en Julia
- Estructuras en Julia
- Utilizar los tipos en Julia
- Tipos de datos en Julia
- Tipos y funciones paramétricos en Julia
- Introducción a los DataFrames en Julia
- Obtener información básica de los DataFrames de Julia
- El tipo de dato Missing de Julia
- Columnas en DataFrames de Julia
- Filas en DataFrames de Julia
- Combinar DataFrames en Julia
- Guardar y leer archivos CSV en Julia
- Guardar y leer archivos Excel en Julia
- Introducción a Genie
- Libros sobre Julia
Deja una respuesta