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