2009-03-17 23 views
17

C#が?=演算子を許可していれば本当にいいですね。ヌル合体代入演算子?

something = something ?? new Something(); 

私はむしろ、このようにそれを記述します:

something ??= new Something(); 

思考自分が頻繁に次のように書いて、私を見つけましたか?新しい言語拡張は、その性質上常に議論の余地があります。

+0

もし私がC#のチーフアーキテクトだったら.....あまりにもむしろあいまいな構造を言語に詰め込まないでください。 さらに、?? ==演算子は、私にとって直感的なものではありません。まったく正直なところです。 –

+2

duplicate http://stackoverflow.com/questions/558010/why-cant-i-do-in-c –

+3

これは新しいものではなく、他の演算子の省略表現に従います –

答えて

1

私は正直言って= ++演算子を最初に引っ張っています。その使用法は広く普及しており、一般的です。明快さの観点から、あなたがタイプする必要がある文字の余分なカップルは、おそらく、言語を変更する価値がありませんか?これが投票であれば、私はその言語の変更に対して投票します(良い質問、悪い考えです:-)

私はこれを試していませんが、ビジュアルスタジオのマクロにマップできますか?それはあなたのために書き直しましたか?

+2

'= ++'演算子はありません。私はあなたが '+ ='複合代入演算子を意味すると仮定します。その場合、 'a + = b'は' a = a + b'の略語ではないので、その包含の理由があります。 https://msdn.microsoft.com/en-us/library/aa691316%28v=vs.71%29.aspxをご覧ください。詳細はこちらをご覧ください。 – 0b101010

+0

は文法的な砂糖だけになります。コンパイルすると、コンパイラは普通のもののように他の多くの演算子のように「拡張」します。そのような悪い要求ではありません。とにかくVSマクロのアイデアは良いですが、本当の答えではありません。 – Raffaello

2

私は、??演算子以上のパターンはそれほど一般的ではないので、新しい演算子は過剰です。

+0

私の考えはまさに。 –

+0

それは文法的な砂糖です。何も新しいものはありません。 – Raffaello

2

私は必ずしもオペレータに反しているわけではありませんが、そのような変数の再利用は私にとって「正しい方法」のようには感じられません。 ??明らかなようにNULLポインタは、いくつかの予期しない方法で予期しないデータや仕事と人口終わるされている必要がありますバグ、など....

2

はと同様の方法で三項演算子を使用するための省略形です:

(myObject != null) ? myObject : somethingElse; 

算術演算の省略形ではなく、??=操作が適切だとは思わない。これは条件付き演算子です。 Rubyのような

+0

変数の状態のヌル状態をチェックし、ヌルの場合にのみそれ自身を割り当てたい場合は、それは良いフィットです。例えば'_date = _date ??値; ' – Rice

14

他のプログラミング言語は、かなり頻繁にこれを使用する:場合

​​
4

を「何かが」プロパティアクセサのためのプライベートフィールドである場合は、次の操作を行うことができます....これは割り当てを実行することになりフィールドがnullであることがわかります。

private Something something; 
public Something Something 
{ 
    get 
    { 
     return something ?? (something = new Something()); 
    } 
} 
+0

これはオペレータの意図に対処しません。私の質問の目的は、?? =演算子を組み込む計画があるかどうかを尋ねることであり、それは理にかなっています。上のコード例はコードを合理化するものではなく、それぞれの場合について記述する必要があります。 – CodeMonkeyKing

2

私は実際に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'] ?? = 'value'。したがって、varがnullの場合は 'value'に設定され、それ以外の場合は同じままになります。

このプルリクエストで私はこれを実装しようとしました。

$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;' 
5 
+0

偉大な知っているが、元の要求はC#でこれを行うためのものでした。 – CodeMonkeyKing

+0

https://wiki.php.net/rfc/null_coalesce_equal_operator –

関連する問題