Cuando trabajamos con Scala, una de las herramientas fundamentales para controlar la repetición de código son los bucles. En particular, los bucles while y do-while nos permiten ejecutar una sección de código mientras se cumpla una condición determinada, y entender su funcionamiento es clave para manejar flujos repetitivos de manera efectiva.
El bucle while evalúa su condición antes de cada iteración, lo que significa que puede que el bloque de código dentro del bucle no se ejecute ni una sola vez si la condición inicial no se cumple. Por ejemplo, si declaramos una variable mutable k con valor inicial cero, podemos hacer que el bucle imprima el valor de k mientras sea menor que 20, incrementando k en cada paso:
var k = 0
while (k < 20) {
println(s"k vale $k")
k = k + 1
}
Aquí, la variable k es mutable porque necesitamos modificar su valor en cada iteración. Aunque en programación funcional se suele evitar la mutabilidad, en este caso es necesaria para que el bucle avance. Además, hemos aprovechado la interpolación de cadenas de Scala para simplificar la impresión. En lugar de concatenar cadenas y variables con el operador +, simplemente ponemos una s antes de la cadena y usamos $k para insertar el valor de la variable directamente. Esto hace que el código sea más legible y limpio.
Si queremos incluir una expresión más compleja dentro de la cadena interpolada, podemos usar llaves para delimitarla, por ejemplo:
println(s"k más uno es ${k + 1}")
Esto evalúa la expresión k + 1 y la inserta en la cadena.
Por otro lado, el bucle do-while funciona de manera diferente: primero ejecuta el bloque de código y luego evalúa la condición. Esto garantiza que el código dentro del bucle se ejecute al menos una vez, independientemente de si la condición es verdadera o falsa desde el principio. Un ejemplo sería:
var k = 0
do {
println(s"k vale $k")
k = k + 1
} while (k < 20)
En este caso, el bloque se ejecuta y luego se verifica si k sigue siendo menor que 20 para decidir si repetir la ejecución.
Es importante destacar que, aunque estos bucles son muy útiles, en Scala y otros lenguajes funcionales existen formas más idiomáticas y seguras de manejar iteraciones, como el uso de rangos y el bucle for, que permiten evitar la mutabilidad y escribir código más declarativo. Pero para entender los fundamentos, dominar while y do-while es un buen punto de partida.
Además, la interpolación de cadenas es una característica que mejora mucho la legibilidad del código, evitando concatenaciones engorrosas y facilitando la inserción de variables y expresiones dentro de textos. Esto es algo que Scala ofrece y que no está presente en todos los lenguajes, por lo que es una ventaja que debemos aprovechar.
En resumen, el bucle while evalúa la condición antes de ejecutar el código, pudiendo no ejecutarse nunca si la condición es falsa desde el inicio, mientras que el do-while ejecuta el código al menos una vez y luego evalúa la condición para continuar o detenerse. Ambos pueden combinarse con la interpolación de cadenas para imprimir valores de manera sencilla y clara. Más adelante, exploraremos cómo el bucle for en Scala nos permite manejar iteraciones de forma más funcional y elegante.