Отсутствует Dart проверка нуля стенограмма? - PullRequest
0 голосов
/ 22 февраля 2019

Я знаю, что у Дарта есть короткие проверки нуля

x = y ?? z;

и

x = y?.z;

Но что, если у меня есть утверждение типа

x = (y != null) ? SomeClass(y) : z;

не хочу передавать null в конструктор SomeClass - поэтому в этом случае я хочу, чтобы x был установлен на z (в моей конкретной ситуации z оказывается null).

Я не могу понять, как / могу ли я использовать какие-либо сокращения в этом сценарии, или я застрял с прямой проверкой нуля.

1 Ответ

0 голосов
/ 22 февраля 2019

Краткий ответ: нет сокращения.Ваш код хороший.

Очень короткий ответ: это зависит.;)

Если вы думаете об окружающей кодовой базе, вы можете придумать другую архитектуру в целом.

Вы можете также передать null конструктору

x = SomeClass(y);

изатем задайте разумное значение по умолчанию в вашем списке инициализатора:

class SomeClass {
  dynamic _value;

  SomeClass(value) _value = value ?? ''; 
}

или сгенерируйте исключение:

var nullError = Exception('Null value not allowed');

class SomeClass {
  dynamic _value;

  SomeClass(value) _value = value ?? (throw nullError);
}

, хотя более идиоматический способ будет таким:

class SomeClass {
  dynamic _value;

  SomeClass(value) {
    ArgumentError.checkNotNull(value);
    _value = value;
}

Поскольку я ничего не знаю об остальной части вашего кода, я не могу дать вам правильный ответ.Но я предлагаю вам спросить себя:

  • Откуда берется это значение z?Что это значит? (Если вы работаете в большом проекте, вы можете использовать Dependency Injection или Factories.)

  • Возможно, у меня есть компонент вида, где он пустстроки более полезны, чем нули?

Вот некоторые вещи, которые я хотел бы спросить сам.Но если вы взламываете быстрый сценарий, это может быть длинный выстрел.Возможно, вы уже выполнили свою задачу, и, возможно, вам действительно не нужна была запись в первую очередь.

...