Ключевое слово late
Ключевое слово late в Dart используется для
объявления переменных, которые будут инициализированы
не в момент объявления, а позже. Это может быть полезно,
когда значение переменной неизвестно на момент создания
объекта или когда вычисление значения является дорогостоящей
операцией и должно выполняться только при первом обращении.
Существует два основных сценария использования late:
отложенная инициализация полей класса и ленивые переменные
верхнего уровня или локальные переменные.
Синтаксис
late type variableName;
late type variableName = initializer;
Пример
Давайте рассмотрим пример отложенной инициализации
поля класса с помощью late:
class Example
{
late String value;
}
void main()
{
Example ex = Example();
ex.value = 'abcde';
print(ex.value);
}
Результат выполнения кода:
"abcde"
Пример
Давайте рассмотрим пример ленивой переменной с инициализатором, который вычисляется только при первом обращении:
late String message = getMessage();
String getMessage()
{
print('Вычисление значения');
return 'abcde';
}
void main()
{
print('До обращения');
print(message);
print('После обращения');
print(message);
}
Результат выполнения кода:
"До обращения"
"Вычисление значения"
"abcde"
"После обращения"
"abcde"
Пример
Давайте рассмотрим пример, в котором late
переменная инициализируется в отдельном методе:
class Data
{
late int number;
void init()
{
number = 12345;
}
}
void main()
{
Data data = Data();
data.init();
print(data.number);
}
Результат выполнения кода:
12345
Пример
Если обратиться к late переменной до её
инициализации, возникнет ошибка. Давайте убедимся
в этом:
void main()
{
late String value;
print(value);
}
Результат выполнения кода:
LateInitializationError: Field 'value' has not been initialized.