В следующей строке кода есть два вопросительных знака:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
В чем смысл?
Оператор с ??
двойным вопросительным знаком означает «если ноль». Возьмем, к примеру, следующее выражение.
String a = b ?? 'hello';
Это означает a
равно b
, но если b
равно нулю, то a
равно 'hello'
.
Другой связанный оператор - ??=
. Например:
b ??= 'hello';
Это означает, что если b
имеет значение null, установите его равным hello
. В противном случае не меняйте его.
Справка
термины
В новостях о выпуске Dart 1.12 в совокупности упоминаются следующие операторы с нулевым значением :
??
- если нулевой оператор??=
- присвоение с нулевым учетомx?.p
- нулевой доступx?.m()
- вызов метода с нулевым значением
?
уже используется оператор троичного:String a = b == true ? 'x' : 'y';
. Который оператор if-null оказывается просто сокращением для тернарной проверки на null, напримерString a = a == null ? 'hello : a;
.?
используется для тернарного оператора точно так же в PHP, и есть ярлыки, например, вместо того, чтобы$a = $b === true ? $b : 'y'
вы могли ввести$a = $b === true ?: 'y'
или вместо$a = $b === true ? 'x' : $b
-$a = $b === true ?? 'x'