Ключевое слово late
Ключевое слово late позволяет объявить
переменную, которая будет инициализирована
не сразу, а позже - при первом обращении к ней.
При этом переменная может быть объявлена как
не-nullable тип, и компилятор не будет требовать
немедленной инициализации. Если обратиться к
late-переменной до её инициализации,
будет выброшено исключение LateInitializationError.
Ключевое слово late особенно полезно
для ленивой инициализации полей класса, когда
значение вычисляется дорого или зависит от
других данных, доступных только после создания
объекта.
Синтаксис
late Type variable;
late Type variable = value;
Пример
Давайте объявим late-переменную
и инициализируем её позже:
void main()
{
late String str;
str = 'abcde';
print(str);
}
Результат выполнения кода:
"abcde"
Пример
Давайте попробуем обратиться к late-переменной
до её инициализации:
void main()
{
late int num;
print(num);
}
Результат выполнения кода:
Unhandled exception:
LateInitializationError: Field 'num' has not been initialized.
Пример
Давайте используем late для ленивой
инициализации поля класса:
class Calculator
{
late int res;
Calculator()
{
print('Object created');
}
int compute()
{
late int a = 2;
late int b = 3;
res = a + b;
return res;
}
}
void main()
{
Calculator calc = Calculator();
print(calc.compute());
}
Результат выполнения кода:
"Object created"
5
Пример
Давайте используем late с коллекцией
и добавим элементы после объявления:
void main()
{
late List<int> numbers;
numbers = [1, 2, 3, 4, 5];
print(numbers);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]