Hoy vamos a hablar sobre otro de los elementos básicos en cualquier lenguaje de programación, como son los ciclos o también llamados bucles que como debes de saber permite ejecutar un número determinado de veces un grupo de iteraciones sobre un bloque de código, y este número de repeticiones viene establecida o marcada por una condición al estilo de los condicionales que tratamos en la entrada anterior.
En esta entrada vamos ha hablar sobre los ciclos for y while en Swift.
Aunque como vamos a ver, cada uno de ellos tienen su variación que vamos a tratar a continuación:
El for en Swift
Existen muchísimas variaciones que puedes aplicar sobre un bucle de tipo for, generalmente todas van seguidas del in
que acto seguido permite que especifiquemos el tipo de estructura que podemos iterar, que pueden ser desde rangos hasta array todas con sus variaciones y con posibilidad de combinar todos los esquemas que te traemos aquí; recuerda que te presentamos los esquemas más comunes pero existen más.
for
El bucle se podría ver como el más sencillo de entender, ya que viene con una estructura bien marcada y fácil de entender; en el mismo especificamos la cantidad de interacciones que queremos realizar, marcando el elemento inicial y luego el elemento final y aumentando de uno en uno de manera por defecto:
for i in 1...5 {
print(i)
}
Aquí obtenemos como salida:
12345
En el ejemplo anterior mostramos una variable llamada i
que toma como primera valor el de uno, ya que ese es el primer valor del rango 1..5
, y a medida que se ejecuta este valor se va incrementando en uno hasta llegar al final del rango que para este ejemplo sería el de 5.
En el mismo podemos colocar cualquier tipo de lógica que queramos, por ejemplo, si queremos hacer una distinción entre valores pares e impares:
for i in 1...10 {
if i%2 == 0{
print("Es par \(i)")
} else {
print("Es impar \(i)")
}
}
El resultado sería:
Es impar 1
Es par 2
Es impar 3
Es par 4
Es impar 5
Es par 6
Es impar 7
Es par 8
Es impar 9
Es par 10
Esta es la estructura que tenemos por defecto y usualmente se emplea para iterar colecciones como lo son listas o arrays.
For in y los where
Ahora, supongamos que tenemos una lista o un rango muy grande, y solo queremos procesar algunos y no toda la colección para economizar recursos de computo, según un condicional como explicamos en la entrada anterior, entonces; ¿Cómo hacemos para que el for
solo se ejecute en base a una condición?; para eso podemos emplear la estructura del where
como vemos a continuación en donde solo se van a mostrar los valores pares:
for i in 1...10 where i % 2 == 0{
print("Es par \(i)")
}
El resultado sería:
Es par 2
Es par 4
Es par 6
Es par 8
Es par 10
Como puedes ver, simplemente incorporamos una estructura condicional, tal cual explicamos en el vídeo anterior.
For in en reversa (reversed)
Ahora, supongamos que nos interesa procesar una lista al revés, aunque esto es una función de los rangos, es importante conocer que también podemos hacer esta clase de definiciones cuando estamos creando un for
en Swift:
for i in (1...5).reversed(){
print("Val \(i)")
}
El resultado sería:
Val 5
Val 4
Val 3
Val 2
Val 1
For in valores decrecientes
Si queremos ir de mayor a menor, podemos implementar una estructura como la siguiente en la cual vamos decrementando valores desde el 5 hasta el 1:
for i in stride(from: 5, to: 0, by: -1) {
print("Val \(i)")
}
El resultado sería:
Val 5
Val 4
Val 3
Val 2
Val 1
For in incrementar en valores personalizados
También podemos personalizar en cuanto va a incrementar o decrementar nuestra variable empleando la función stride
de la siguiente forma:
for i in stride(from: 0, to: 10, by: 2) {
print("Val \(i)")
}
El resultado sería:
Val 0
Val 2
Val 4
Val 6
Val 8
Recorrer arrays con los for in
Como indicamos al inicio de la entrada, el uso más común que le podemos dar a los for
, es que iteren un objeto de tipo lista o array como presentamos en el siguiente caso:
let numeros = [5, 10, 15, 20, 25, 30, 100]
for i in numeros {
print("Val \(i)")
}
También podemos variar su implementación de la siguiente forma:
numeros.forEach { i in
print("Val \(i)")
}
El resultado sería:
Val 5
Val 10
Val 15
Val 20
Val 25
Val 30
Val 100
Obtener el índice y el valor
Podemos personalizar nuestro for
para que también nos indique el índice de la iteración, además del valor de la misma:
for (index, i) in numeros.enumerated() {
print("Val \(i) - Indice \(index)")
}
El resultado sería:
Val 5 - Indice 0
Val 10 - Indice 1
Val 15 - Indice 2
Val 20 - Indice 3
Val 25 - Indice 4
Val 30 - Indice 5
Val 100 - Indice 6
El bucle while en Swift
Para el bucle o ciclo while en Swift es prácticamente lo mismo que en cualquier lenguaje de programación; tenemos un par de variaciones, el while tradicional y el llamado do-while o aquí en Swift sería el repeat-while:
while
La estructura básica del while es que mientras no se ejecute una condición, entonces este seguirá ejecutándose, a diferencia del for en el cual podemos ver un número de interacciones bien especificadas, aquí no:
while val > 10 {
print(val)
val += 1
}
Y obtenemos por resultado:
0
1
2
3
4
5
6
7
8
9
Ahora, si establecemos la siguiente configuración:
var val = 10
while val > 10 {
print(val)
val += 1
}
El ciclo no se ejecuta, ya que lo primero que hace el while es verificar si la condición aplica, pero como vimos en el caso anterior, esto es falso desde un inicio ya que 10 no es menor a 10 y por lo tanto el ciclo acaba antes de iniciar, pero si necesitamos que se ejecute al meno una vez sin importar la condición inicial, podemos emplear la siguiente estructura.
repeat while
Aquí vamos a estar seguros que al menos una vez nuestro código se va a ejecutar:
var val = 10
repeat {
print(val)
val += 1
} while val > 10
Y obtenemos como salida:
10
Cómo ves, es la misma sintaxis, solo que desplazamos la verificación del while al final y al inicio colocamos la palabra reservada repeat
.
Si partimos del ejemplo inicial, en donde val
tenía un valor de cero, veremos que es la misma salida, ya que cuando val alcanza el valor de 10, inmediatamente la siguiente línea de código que se ejecuta es la verificación del while:
var val = 10
repeat {
print(val)
val += 1
} while val > 10
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter