Нулевой коалесцирующий оператор присваивания?

Было бы очень приятно, если бы С# допустил оператор? =. Я часто писал следующее:

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