Оператор ?.
Оператор ?. выполняет безопасный доступ к свойствам и методам объекта, который может иметь значение null. Если объект слева от оператора не равен null, то выполняется обычный доступ к свойству или вызов метода. Если же объект равен null, то всё выражение немедленно возвращает null, и никакие дальнейшие операции не выполняются. Это позволяет избежать ошибки NoSuchMethodError или Null check operator used on a null value.
Синтаксис
object?.property
object?.method()
Пример
Давайте получим длину строки, которая может быть null, используя оператор ?.:
void main()
{
String? str = 'abcde';
print(str?.length);
}
Результат выполнения кода:
5
Пример
Теперь давайте посмотрим, что произойдёт, если строка равна null:
void main()
{
String? str = null;
print(str?.length);
}
Результат выполнения кода:
null
Пример
Оператор ?. можно использовать для вызова методов объекта, который может быть null:
void main()
{
String? str = 'abcde';
print(str?.toUpperCase());
}
Результат выполнения кода:
"ABCDE"
Пример
Если объект равен null, вызов метода через ?. также вернёт null:
void main()
{
String? str = null;
print(str?.toUpperCase());
}
Результат выполнения кода:
null
Пример
Оператор ?. можно объединять в цепочки для безопасного доступа к вложенным свойствам:
class User
{
String? name;
}
void main()
{
User? user = User();
user.name = 'abcde';
print(user?.name?.length);
}
Результат выполнения кода:
5
Пример
Если промежуточное значение в цепочке равно null, вся цепочка вернёт null:
class User
{
String? name;
}
void main()
{
User? user = null;
print(user?.name?.length);
}
Результат выполнения кода:
null