この章のテーマ §
前提知識 §
Console.WriteLineメソッド, 変数の基礎, 条件演算子, int型, 配列, null, 列挙型, 値型と参照型
解説 §
C#のデータには全て型が存在します。それらの型には既定値(デフォルト値)が存在します。
既定値は値を指定せずに変数などが確保されたときに自動的に入る値です。
単純な変数は値を指定せずに使用することはできないため、既定値を意識することは少ないと思いますが、配列の要素などは既定値で初期化されます。たとえば、new int[1]という式で作られた配列の要素に既定値の0が入っています。
既定値は、一般的に値型では0、参照型ではnullです。bool型はfalse, 列挙型では0に対応する値になります。int型は値型なので0、string型は参照型なのでnullとなります。
既定値を参照するには、defaultキーワードを使ってdefult(型名)と書きます。たとえば、int型の既定値はdefault(int)として取得できます。文脈から型が明確に分かる時は、型名は省略してdefaultのみで記述できます。サンプルソースのif (a == default)はそうやって型名を省略しています。
罠の数々 §
- defaultキーワードの使い道は複数あります。ここで説明しているのはその一つです。switch文で使用するdefaultキーワードは、switch文で解説します
- 既定値で初期化されることを意識してプログラムを設計すると、初期化のコードをシンプルにできることもある
参考リンク §
default (C# リファレンス)
既定値式 (C# リファレンス)
サンプルソース: kw_default §
int a = 1;
int[] b = new int[1];
int c = default(int);
if (a == default)
Console.WriteLine("aはデフォルト値だよ。");
else
Console.WriteLine("aはデフォルト値じゃないよ。");
if (b[0] == default)
Console.WriteLine("b[0]はデフォルト値だよ。");
else
Console.WriteLine("b[0]はデフォルト値じゃないよ。");
if (c == default)
Console.WriteLine("cはデフォルト値だよ。");
else
Console.WriteLine("cはデフォルト値じゃないよ。");
実行結果 §
aはデフォルト値じゃないよ。
b[0]はデフォルト値だよ。
cはデフォルト値だよ。
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
int型の既定値は0である。int a = 1-1;と書いた時、変数aの値は既定値だろうか? それとも違うのだろうか?
- 既定値である。1-1の結果は0だから、既定値なる
- 既定値にならない。1-1のどこにも0などとは書いていない
[[解答]]