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

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