En este Tutorial Swift aprenderemos sobre los bucles, esos bloques de código que nos ayudan con tareas que por naturaleza son repetitivas, ejecutando un segmento de código repetidas veces, tanto por un número específico de iteraciones o hasta que cierta condición sea lograda. Los bucles a groso modo evitan que escribamos cientos de líneas de código tedioso y repetitivo.

Hablaremos de dos tipos de bucles:

  • El bucle for
  • El bucle while

El bucle for es ideal cuando necesitamos iterar sobre una cantidad específica de elementos de una instancia o colección de instancias, cuando el número de iteraciones es tanto conocido o fácil de derivar. El bucle while por su parte viene a ser muy útil y la elección correcta ante tareas que se ejecutan repetidas veces, tantas como cierta condición establezca. Cada uno de estos bucles cuenta con variaciones, comencemos con el bucle for-in el cual ejecuta su bloque de código por cada elemento dentro de un rango específico, una secuencia o colección.

En caso de que no lo sepan, a partir de Swift 3 los operadores unarios ++ y así como los bucles for al estilo C ya no podrán ser implementados, de hecho ahorita el Xcode ya nos recomienda usar alternativas. Por este motivo he decidido enfocarme en un código más compatible con futuras versiones de Swift al mismo tiempo que brindo alternativas a estas dos características del lenguaje Swift que serán eliminadas.

El bucle for-in

Comencemos por analizar un ejemplo bien sencillo:

…el bucle for-in no es propio de Swift, existe en muchos lenguajes de programación dada su sencillez y versatilidad. En este ejemplo contamos con la variables myFirstInt igualada a cero, para luego en la siguiente línea, tener nuestro for y la constante i, la cual solamente existe dentro del cuerpo del for y que representa el valor actual del iterador. En el primer ciclo del bucle la constante i es igualada al primer valor del rango de 1 a 5 que hemos especificado, nuevamente vemos la sintaxis de rangos x…y, que en este bucle for-in es la fuente de valores por la cual iteraremos, en el segundo ciclo i será igual a 2 y así consecutivamente. Continuamos con la línea 9 donde aumentamos la variable myFirstInt en una unidad para acto seguido imprimirla en pantalla, la salida sería:

case y where

El bucle for en Swift hace gala y se vuelve protagonista de la versatilidad que caracteriza a este lenguaje de programación, permitiéndonos especificar la sentencia case y where en pos de mejorar el control sobre la manera en la que este bucle ejecuta su código.

Ciertamente el modo que más usaremos de for-in es el más sencillo, pero hay casos donde necesitamos, con tal de no complicarnos con más código, una solución elegante y limpia. Veamos un ejemplo de uso de las sentencias case y where en conjunto con un bucle for, para esto imaginemos que necesitamos iterar sobre un conjunto de valores, digamos un rango de valores, hasta aquí todo bien, pero la cosa se complica cuando se nos informa que solamente podemos ejecutar el código del bucle por cada uno de estos números que sea múltiplo de 3.

En este punto muchas alternativas nos pueden devenir, pero de seguro una de las primeras sería la de un bucle for-in iterando sobre el rango numérico mientras un bloque if valida cada número y de ser múltiplo de 3 pues ejecutaría el código que este tendría bajo su custodia, algo así:

…la salida en pantalla sería:

Enfoquémonos en el fragmento de código que nos interesa, aquel comprendido entre las líneas 15 y 23 . Como ya comenté este sería quizás el algoritmo más dispuesto a mostrarse como primera opción y como podemos comprobar en la salida en pantalla hace su trabajo correctamente. Ahora veamos como nos pueden apoyar case y while para lograr el mismo objetivo:

…esta actualización de nuestro bucle for al mismo tiempo que mejora la legibilidad del código, ya que a mi modo de ver, no deja dudas en cuanto a la tarea que se ejecuta dado a que la primera línea prácticamente se puede leer como una oración, pues también reduce el código pues como vemos ya no es necesario el bloque if.

Reverse

También pudiéramos haber usado (en dependencia de nuestras necesidades) el método de instancia reverse(), aquí el ejemplo anterior modificado:

…la salida en pantalla:

Con la salida en pantalla tuve un problema estético y es que los número 3, 6 y 9 en una versión inicial del código generaban que las primeras tres columnas lucieran alineadas hacia la izquierda. Por este motivo es que he añadido un extra al código, el segmento de la línea 5 a la 13, donde extiendo el tipo de dato Int para añadirle un método / función llamado format y mediante este retorno el mismo valor de la variable pero ya formateado con la alineación y la cantidad de dígitos deseada y que le hayamos pasado como parámetro. Las extensiones las veremos más adelante en esta serie de tutoriales.

Stride

Una función que creo merece la pena mencionar es stride(through:by) o stride(to:by) la cual nos va a permitir ir iterando por una secuencia de valores mediante salto de tantas unidades como haya sido especificado:

…en este bucle for vamos desde 0 hasta 20 por saltos de 2 unidades, la salida del código anterior sería:

Indices

Hacer uso de índices es algo bien frecuente cuando iteramos a través de un arreglo, estos denotan la posición de un valor dentro del mismo. Esta tarea usualmente se lleva a cabo con la versión de for al estilo C, pero en el lenguaje Swift no dependemos de esta opción, también podemos hacer lo siguiente:

…la salida en pantalla:

En el cabezal del for en la línea 17 hacemos uso de la función enumerate() que forma parte del protocolo SequenceType y que es implementado por los arreglos con el fin de que podamos iterar a través de ellos. Pues esta función nos devuelve el par del índice con base cero más el valor que se encuentra almacenado en el mismo. Es decir que tampoco en esta ocasión es necesario el for al estilo C.

El bucle while

En este bucle no hay mucho que comentar ya que en Swift mantiene su forma tradicional:

…nada nuevo, nada que no se pueda deducir.

repeat while

Lo único digno a mencionar en este apartado es que la variación do-while que podemos encontrar en otros lenguajes de programación pues en Swift adopta la forma repeat-while, como se muestra en el siguiente ejemplo:

…y eso sería todo con respecto a los bucles while.

Antes de finalizar quiero añadir que Swift cuenta con las palabras claves continue y break que vienen a permitirnos controlar el flujo de los bucles y los bloques switch, algo realmente mandatory y que se usan como en el resto de lenguajes. Me gustaría también hacer notar que no hemos necesitado hacer uso del bucle for en su estilo C, las alternativas nos han servido de manera óptima.

Para más información y ejemplos podemos dirigirnos a la documentación oficial de Swift (Inglés) en el sitio de desarrolladores de Apple.

Espero que todo cuanto se ha dicho aquí, de una forma u otra le haya servido de aprendizaje, de referencia, que haya valido su preciado tiempo.

Este artículo, al igual que el resto, será revisado con cierta frecuencia en pos de mantener un contenido de calidad y actualizado.

Cualquier sugerencia, ya sea errores a corregir, información o ejemplos a añadir será, más que bienvenida, necesaria!