「C Sharp/null合体演算子」の版間の差分

imported>Fallout New Tokyo
編集の要約なし
imported>Fallout New Tokyo
編集の要約なし
 
1行目: 1行目:
[[C Sharp|C#]]における'''null合体演算子'''(ぬるがったいえんざんし、null coalescing operator)とは、[[C Sharp/null許容型|null許容型]]や[[C Sharp/参照型|参照型]]などにおいて、その[[値]]が[[C Sharp/null|null]]の場合に指定した値を返す[[演算子]]である。なお、null合体演算子は「'''??'''」という記号をもちいるため「'''??演算子'''」と記述されることもあるが、ハテナ2個とか[[ググれ]]ないわ、読み方に困るわで「null合体演算子」で統一することが望ましいとされている。
[[C Sharp|C#]]における'''null合体演算子'''(読み:ぬるがったいえんざんし、[[英語]]:null coalescing operator)とは、[[C Sharp/null許容型|null許容型]]や[[C Sharp/参照型|参照型]]などにおいて、その[[値]]が[[C Sharp/null|null]]の場合に指定した値を返す[[演算子]]である。なお、null合体演算子は「'''??'''」という記号をもちいるため「'''??演算子'''」と記述されることもあるが、ハテナ2個とか[[ググれ]]ないわ、読み方に困るわで「null合体演算子」で統一することが望ましいとされている。


null合体演算子はC# 2.0で追加された機能(演算子)で、同じくC# 2.0で追加された[[C Sharp/null許容値型|null許容値型]]に付随して追加されたものだと思われるが、従来からの[[C Sharp/参照型|参照型]]でも使える。
null合体演算子はC# 2.0で追加された機能(演算子)であり、同じくC# 2.0で追加された[[C Sharp/null許容値型|null許容値型]]に付随して追加されたものだと思われるが、従来からの[[C Sharp/参照型|参照型]]でも使える。


== 記述方法 ==
== 記述方法 ==
12行目: 12行目:
これを[[三項演算子]]で書くと以下のようになる。
これを[[三項演算子]]で書くと以下のようになる。
非常にわかりにくく、とくに初心者に見せるための[[ソースコード]]としては最悪である。
非常にわかりにくく、とくに初心者に見せるための[[ソースコード]]としては最悪である。
[[三項演算子]]は[[N88-BASIC]]などの時代においては[[if文]]よりも高速に[[条件分岐]]できるという理由で乱用され、また「俺かっこいい」と勘違いしたバカが意味もなく乱用するケースも多々見受けられたが、現代においては乱用は避けるべきである。
[[三項演算子]]は[[N88-BASIC]]などの時代においては[[if文]]よりも高速に[[条件分岐]]できるという理由で乱用され、また「俺かっこいい」と勘違いしたバカが意味もなく乱用するケース([[中級者病]])も多々見受けられたが、現代においては乱用は避けるべきである。
<source lang="csharp">
<source lang="csharp">
int z = x != null ? x : y;
int z = x != null ? x : y;
55行目: 55行目:
         int? x = null;
         int? x = null;


// null合体演算子の例1
        // null合体演算子の例1
         // y = xがnullでなければx, xがnullなら-1
         // y = xがnullでなければx, xがnullなら-1
         int y = x ?? -1;
         int y = x ?? -1;
63行目: 63行目:
         int i = GetNullableInt() ?? default(int);
         int i = GetNullableInt() ?? default(int);


// null合体演算子の例3
        // null合体演算子の例3
// 参照型の場合もnull許容値型の場合と同じ
        // 参照型の場合もnull許容値型の場合と同じ
         string s = GetStringValue();
         string s = GetStringValue();
         Console.WriteLine(s ?? "Unspecified");
         Console.WriteLine(s ?? "Unspecified");