「C Sharp/null合体演算子」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
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行目: | 13行目: | ||
これを[[三項演算子]]で書くと以下のようになる。 | これを[[三項演算子]]で書くと以下のようになる。 | ||
非常にわかりにくく、とくに初心者に見せるための[[ソースコード]]としては最悪である。 | 非常にわかりにくく、とくに初心者に見せるための[[ソースコード]]としては最悪である。 | ||
− | [[三項演算子]]は[[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行目: | 49行目: | ||
} | } | ||
− | // C# | + | // C#で定番のエントリーポイント |
static void Main() | static void Main() | ||
{ | { | ||
55行目: | 56行目: | ||
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行目: | 64行目: | ||
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行目: | 118行目: | ||
* [[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]] | ||
+ | |||
+ | == 参考文献 == | ||
+ | <references/> | ||
== 外部リンク == | == 外部リンク == | ||
* [http://msdn.microsoft.com/ja-jp/library/ms173224.aspx ?? 演算子 (C# リファレンス) - MSDN] | * [http://msdn.microsoft.com/ja-jp/library/ms173224.aspx ?? 演算子 (C# リファレンス) - MSDN] | ||
− | |||
− | |||
− | |||
{{stub}} | {{stub}} |