Що таке ?? подвійні знаки запитання в Дарті?


85

Наступний рядок коду має два знаки запитання:

final myStringList = prefs.getStringList('my_string_list_key') ?? [];

Що сенс?

Відповіді:


171

Оператор ??подвійного знака запитання означає "якщо нуль". Візьмемо, наприклад, такий вираз.

String a = b ?? 'hello';

Це означає aдорівнює b, але якщо bдорівнює нулю, то aдорівнює 'hello'.

Іншим пов'язаним оператором є ??=. Наприклад:

b ??= 'hello';

Це означає, що якщо bзначення null, то встановіть його рівним hello. Інакше не змінюйте його.

Довідково

Умови

Випуск новин Dart 1,12 спільно іменовані надалі як нуль-залежних операторів :

  • ?? - якщо нульовий оператор
  • ??= - нульове призначення
  • x?.p - нульовий доступ
  • x?.m() - виклик нульового методу

3
Цікаво, чому це ?? а ні?:, це досить оманливе для тих, хто походить з PHP, як ?? в PHP означає абсолютно протилежне.
Ведмант

1
@Vedmant ймовірно , тому , що ?вже використовується оператор троичного: String a = b == true ? 'x' : 'y';. Який оператор if-null виявляється просто скороченням для трійкового перевірки null String a = a == null ? 'hello : a;.
Bruno Finger

1
@BrunoFinger ?використовується для трійкового оператора так само, як і в PHP, і є ярлики, як замість того, щоб $a = $b === true ? $b : 'y'ви могли вводити, $a = $b === true ?: 'y'а замість $a = $b === true ? 'x' : $b-$a = $b === true ?? 'x'
Ведмант

|| було б зрозуміліше
ced,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.