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.
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.
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.
lazy val
en Scala
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.
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.
Para más información sobre lazy val
en Scala, puedes visitar la documentación oficial de Scala.
Jorge García
Fullstack developer