En Dart, la Late Initialization permite declarar variables que se inicializarán más adelante, es decir, en un momento posterior a su declaración. Con la palabra clave late
, Dart permite definir variables no-nullables sin inicializar de inmediato, lo que es útil cuando no puedes asignar un valor en el momento de la declaración pero necesitas garantizar que la variable tendrá un valor antes de su uso.
La inicialización tardía (late
) permite posponer la asignación de una variable no nullable hasta que se necesite. Esto ayuda a gestionar dependencias y optimizar el uso de memoria, especialmente en casos en que la variable depende de alguna configuración, procesamiento o cálculo previo.
Para declarar una variable con inicialización tardía, usa la palabra clave late
antes de su tipo. Esto indica que la variable no puede ser null
, pero su valor será asignado después de la declaración.
late String mensaje;
void main() {
mensaje = "Hola, Dart!";
print(mensaje); // Imprime: Hola, Dart!
}
En este ejemplo, mensaje
se declara como late
para que pueda inicializarse después de la declaración.
late
para inicialización posterior
En este ejemplo, late
permite que una variable no nullable se inicialice más adelante en el código.
late int numero;
void configurarNumero() {
numero = 10;
}
void main() {
configurarNumero();
print(numero); // Imprime: 10
}
late
con inicialización diferida y cálculo pesado
late
es ideal para inicializar variables solo cuando se necesitan, lo cual es útil para operaciones de cálculo o inicialización intensivas en recursos.
late String valorPesado = realizarCalculoPesado();
String realizarCalculoPesado() {
print("Realizando cálculo pesado...");
return "Resultado del cálculo";
}
void main() {
print("El programa empieza...");
print(valorPesado); // Aquí se ejecuta `realizarCalculoPesado`
print(valorPesado); // Ya no vuelve a ejecutar `realizarCalculoPesado`
}
La primera vez que se accede a valorPesado
, Dart llama a realizarCalculoPesado
. Las siguientes veces, reutiliza el valor ya calculado.
late
en propiedades de clases
late
es útil en clases, especialmente cuando ciertas propiedades requieren inicialización posterior a la creación de la instancia.
class Usuario {
late String nombre;
void asignarNombre(String nuevoNombre) {
nombre = nuevoNombre;
}
}
void main() {
Usuario usuario = Usuario();
usuario.asignarNombre("Juan");
print(usuario.nombre); // Imprime: Juan
}
Aquí, nombre
se inicializa después de crear el objeto Usuario
, permitiendo flexibilidad en la inicialización.
late
Si accedes a una variable late
antes de inicializarla, Dart lanza un error LateInitializationError
.
late String saludo;
void main() {
try {
print(saludo); // Lanza LateInitializationError porque no ha sido inicializado
} catch (e) {
print("Error: $e");
}
}
Para más información sobre Late Initialization, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer