Каскад ?..
Оператор ?.. (null-aware cascade) работает так же,
как и обычный каскадный оператор .., но с одной
важной особенностью: если объект, к которому применяется
каскад, равен null, то вся цепочка вызовов
пропускается и не выполняется. Это позволяет безопасно
работать с объектами, которые могут быть null, без
предварительной проверки. Оператор возвращает сам объект
(или null, если объект был null), что позволяет
продолжать цепочку вызовов.
Синтаксис
obj?..method1()
?..method2()
?..property = value;
Пример
Давайте рассмотрим работу оператора ?..
на объекте, который не равен null:
class MyClass
{
String value = '';
void setValue(String v)
{
value = v;
}
void printValue()
{
print(value);
}
}
void main()
{
MyClass? obj = MyClass();
obj?..setValue('abcde')
?..printValue();
}
Результат выполнения кода:
"abcde"
Пример
Теперь рассмотрим случай, когда объект равен null.
В этом случае вся цепочка каскадных вызовов будет
пропущена:
class MyClass
{
String value = '';
void setValue(String v)
{
value = v;
}
void printValue()
{
print(value);
}
}
void main()
{
MyClass? obj = null;
obj?..setValue('abcde')
?..printValue();
print('Done');
}
Результат выполнения кода:
"Done"
Пример
Давайте вернем результат каскада и убедимся,
что оператор ?.. возвращает исходный объект:
class MyClass
{
String value = '';
void setValue(String v)
{
value = v;
}
}
void main()
{
MyClass? obj = MyClass();
MyClass? res = obj?..setValue('12345');
print(res?.value);
}
Результат выполнения кода:
"12345"