Volver a la página principal
lunes 14 octubre 2024
1

Cómo usar lazy val en Scala

En Scala, el modificador lazy se utiliza para diferir la inicialización de una variable hasta el momento en que se accede por primera vez a su valor. Esto permite optimizar el rendimiento en situaciones donde la inicialización de la variable es costosa y puede que nunca sea necesaria.

¿Qué es lazy val en Scala?

Un lazy val es una variable cuyo valor no se evalúa cuando se declara, sino solo cuando se accede a ella por primera vez. Una vez inicializada, el valor se almacena y se reutiliza en futuras llamadas. Esto es útil cuando se tiene una operación que puede ser costosa o no siempre necesaria, como la carga de archivos grandes o la ejecución de consultas complejas.

La evaluación perezosa o "lazy" es especialmente ventajosa en casos donde el costo de la computación puede evitarse si el valor nunca se utiliza.

Ejemplo básico de lazy val en Scala

lazy val saludo: String = {
  println("Inicializando saludo...")
  "Hola, mundo"
}

println("Antes de acceder a 'saludo'")
println(saludo)  // La primera vez que se accede, se inicializa
println(saludo)  // La segunda vez, ya está inicializado y se reutiliza

Salida:

Antes de acceder a 'saludo'
Inicializando saludo...
Hola, mundo
Hola, mundo

En este ejemplo, el mensaje "Inicializando saludo..." solo se imprime la primera vez que se accede a saludo, lo que muestra que la inicialización es diferida hasta ese momento.

Otros ejemplos de lazy val en Scala

Evitando cálculos innecesarios

def calculaResultado(): Int = {
  println("Calculando resultado...")
  42
}

lazy val resultado = calculaResultado()

println("Antes de acceder a 'resultado'")
println(resultado)  // Aquí se realiza el cálculo
println(resultado)  // El valor ya está almacenado

Esto es útil cuando el cálculo puede ser pesado y no necesariamente se utiliza en todas las ejecuciones del programa.

Inicialización de objetos pesados

class BaseDeDatos {
  println("Conexión establecida...")
  def consulta(): String = "Datos obtenidos"
}

lazy val db = new BaseDeDatos

println("Antes de acceder a 'db'")
println(db.consulta())  // Aquí se inicializa el objeto

En este caso, la conexión a la base de datos se establece solo cuando realmente se necesita.

Referencia oficial

Para más información sobre lazy val en Scala, puedes visitar la documentación oficial de Scala.

Etiquetas:
scala
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer