「C Sharp/null合体演算子」の版間の差分
imported>Administrator 編集の要約なし |
imported>Fallout New Tokyo 編集の要約なし |
||
| (2人の利用者による、間の3版が非表示) | |||
| 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/参照型|参照型]]でも使える。 | ||
== 記述方法 == | == 記述方法 == | ||
null合体演算子は以下のように記述する。 | null合体演算子は以下のように記述する。 | ||
この例では、xが[[null]]以外の場合にはxを返し、xが[[null]]の場合にはyを返す。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
int z = x ?? y; | int z = x ?? y; | ||
| 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; | ||
| 48行目: | 48行目: | ||
} | } | ||
// C# | // C#で定番のエントリポイント | ||
static void Main() | static void Main() | ||
{ | { | ||
| 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"); | ||
| 117行目: | 117行目: | ||
* [[C Sharp|C#]] | * [[C Sharp|C#]] | ||
* [[C Sharp/参照型|C#/参照型]] | * [[C Sharp/参照型|C#/参照型]] | ||
* [[C Sharp/ | * [[C Sharp/null許容型|C#/null許容型]] | ||
* [[C Sharp/null|C#/null]] | * [[C Sharp/null|C#/null]] | ||
== 外部リンク == | == 外部リンク == | ||
* [http://msdn.microsoft.com/ja-jp/library/ms173224.aspx ?? 演算子 (C# リファレンス) - MSDN] | * [http://msdn.microsoft.com/ja-jp/library/ms173224.aspx ?? 演算子 (C# リファレンス) - MSDN] | ||
== 参考文献 == | |||
{{reflist}} | |||
{{stub}} | {{stub}} | ||