En esta sección, aprenderemos sobre los bucles y las iteraciones en Scala. Los bucles son estructuras de control que permiten ejecutar un bloque de código repetidamente, lo cual es fundamental para tareas que requieren repetición, como procesar elementos de una colección o realizar cálculos iterativos.

Conceptos Clave

  1. Bucles while y do-while: Ejecutan un bloque de código mientras una condición sea verdadera.
  2. Bucles for: Iteran sobre una colección o un rango de valores.
  3. Comprensiones for: Una forma más avanzada y expresiva de usar bucles for en Scala.

Bucles while y do-while

Bucle while

El bucle while ejecuta un bloque de código mientras una condición sea verdadera.

Sintaxis:

while (condición) {
  // Bloque de código
}

Ejemplo:

var i = 0
while (i < 5) {
  println(s"i = $i")
  i += 1
}

Explicación:

  • Inicializamos i a 0.
  • Mientras i sea menor que 5, imprimimos el valor de i y luego incrementamos i en 1.

Bucle do-while

El bucle do-while es similar al while, pero garantiza que el bloque de código se ejecute al menos una vez, ya que la condición se evalúa después de la primera ejecución.

Sintaxis:

do {
  // Bloque de código
} while (condición)

Ejemplo:

var j = 0
do {
  println(s"j = $j")
  j += 1
} while (j < 5)

Explicación:

  • Inicializamos j a 0.
  • Imprimimos el valor de j y luego incrementamos j en 1.
  • La condición se evalúa después de la primera ejecución, garantizando que el bloque se ejecute al menos una vez.

Bucles for

El bucle for en Scala es muy flexible y se puede usar para iterar sobre rangos, listas, arrays y otras colecciones.

Iteración sobre un Rango

Sintaxis:

for (i <- inicio to fin) {
  // Bloque de código
}

Ejemplo:

for (i <- 1 to 5) {
  println(s"i = $i")
}

Explicación:

  • Iteramos desde 1 hasta 5, inclusive.
  • En cada iteración, imprimimos el valor de i.

Iteración sobre una Colección

Sintaxis:

for (elemento <- colección) {
  // Bloque de código
}

Ejemplo:

val lista = List("Scala", "Java", "Python")
for (lenguaje <- lista) {
  println(s"Lenguaje: $lenguaje")
}

Explicación:

  • Iteramos sobre cada elemento de la lista lista.
  • En cada iteración, imprimimos el valor del elemento actual.

Comprensiones for

Las comprensiones for son una característica poderosa de Scala que permite realizar operaciones más complejas dentro de un bucle for, como filtrado y mapeo.

Filtrado

Sintaxis:

for (i <- inicio to fin if condición) {
  // Bloque de código
}

Ejemplo:

for (i <- 1 to 10 if i % 2 == 0) {
  println(s"i = $i")
}

Explicación:

  • Iteramos desde 1 hasta 10.
  • Solo imprimimos los valores de i que son pares (i % 2 == 0).

Mapeo

Sintaxis:

val resultado = for (elemento <- colección) yield {
  // Bloque de código que produce un valor
}

Ejemplo:

val lista = List(1, 2, 3, 4, 5)
val cuadrados = for (n <- lista) yield n * 2
println(cuadrados) // List(2, 4, 6, 8, 10)

Explicación:

  • Iteramos sobre cada elemento de la lista lista.
  • En cada iteración, multiplicamos el elemento por 2 y lo agregamos a la nueva colección cuadrados.

Ejercicios Prácticos

Ejercicio 1: Suma de Números

Enunciado: Escribe un programa que calcule la suma de los números del 1 al 100 usando un bucle while.

Solución:

var suma = 0
var i = 1
while (i <= 100) {
  suma += i
  i += 1
}
println(s"La suma de los números del 1 al 100 es: $suma")

Ejercicio 2: Números Pares

Enunciado: Escribe un programa que imprima todos los números pares del 1 al 20 usando un bucle for.

Solución:

for (i <- 1 to 20 if i % 2 == 0) {
  println(i)
}

Ejercicio 3: Filtrado y Mapeo

Enunciado: Dada una lista de números, escribe un programa que filtre los números impares y luego multiplique cada número restante por 3 usando una comprensión for.

Solución:

val numeros = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val resultado = for (n <- numeros if n % 2 == 0) yield n * 3
println(resultado) // List(6, 12, 18, 24, 30)

Conclusión

En esta sección, hemos aprendido sobre los bucles y las iteraciones en Scala, incluyendo los bucles while, do-while, for y las comprensiones for. Estos conceptos son fundamentales para realizar tareas repetitivas y manipular colecciones de datos de manera eficiente. En la próxima sección, exploraremos las funciones y métodos en Scala, lo que nos permitirá modularizar y reutilizar nuestro código de manera efectiva.

© Copyright 2024. Todos los derechos reservados