Нулевой коалесцирующий оператор присваивания?
Было бы очень приятно, если бы С# допустил оператор? =. Я часто писал следующее:
something = something ?? new Something();
Я бы предпочел написать его вот так:
something ??= new Something();
Мысли? Новые языковые расширения всегда являются спорными по своей природе.
Ответы
Ответ 1
Я честно разорван на оператор = ++, и это использование довольно распространено и распространено. С точки зрения ясности, лишняя пара символов, которые вам нужны, вероятно, не стоит менять язык, чтобы добавить a =. Если бы это было голосование, я бы голосовал против этого изменения языка (хороший вопрос, плохая идея.: -)
Я не пробовал это, но мог ли вы сопоставить? = с макросом в визуальной студии, который просто переписал для вас?
Ответ 2
Другие языки программирования, такие как Ruby, используют это довольно часто:
something ||= Something.new
Ответ 3
Если "что-то" является частным полем для доступа к свойствам, вы можете сделать следующее... это выполнит присвоение, если в поле установлено значение null.
private Something something;
public Something Something
{
get
{
return something ?? (something = new Something());
}
}
Ответ 4
Я бы сказал, что оператор ??
и более уместно вышеприведенный шаблон не так распространен, и поэтому новый оператор переполняется.
Ответ 5
Я не обязательно против оператора, однако такое повторное использование переменной просто не похоже на "правильный путь" для меня. Ошибки, которые должны были быть очевидными, указатели NULL в конечном итоге заполняются неожиданными данными и работают неожиданным образом и т.д.
Ответ 6
As ??
является сокращением использования тернарного оператора по модулю, аналогичному:
(myObject != null) ? myObject : somethingElse;
вместо сокращения для арифметической операции, я не думаю, что операция ??=
подходит. Это условный оператор.
Ответ 7
Я действительно реализовал это для PHP7. Это сейчас на этапе предложения RFC.
https://github.com/php/php-src/pull/1795
На самом деле речь шла о нулевом коалесцирующем операторе в PHP7. Проверьте это:
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? ‘value’;
I want to check if some var is null and if the same var is null set the same var to ‘value’.
Следовательно, я повторяю ту же переменную после равного оператора, это не кажется правильным.
Таким образом, я чувствую, что нам нужен другой оператор, подобный "?? =", подобный + =;
$this- > request- > data ['comments'] ['user_id]?? =' значение. Поэтому, если var имеет значение null, его значение устанавливается равным "value" и остается неизменным.
В этом запросе на pull я попытался реализовать это.
$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;'
5