C#のnullとNullable型とは?初心者向けにnull許容型の基本と使い方を徹底解説!
生徒
「C#で変数に値が入っていないことを表す方法ってありますか?」
先生
「はい、C#ではnull
を使って『まだ値がない』という状態を表せますよ。」
生徒
「でも、int型とかにはnullを入れられないんですよね?」
先生
「その通りです。ですが、Nullable型
を使えばintなどの数値型でもnullを使えるようになりますよ!」
1. C#のnullとは?
null(ヌル)とは、「何も値が設定されていない」という状態を表す特別な値です。C#では、参照型(クラスなど)の変数に値を入れないと、自動的にnull
になります。
たとえば、人の名前を格納する変数を考えてみましょう。まだ名前がわからないときには、空欄(null)のままにしておきたいですよね?それをプログラム上で表現するのがnull
です。
string name = null;
このように書くことで、「nameにはまだ何も入っていません」とC#に伝えることができます。
2. 値型はnullを使えない?
ここで重要なポイントがあります。C#には大きく分けて「参照型」と「値型」の2種類のデータ型があります。
- 参照型:stringや配列、クラスなど
- 値型:int(整数)、double(小数)、bool(真偽)など
参照型はnullを使えますが、値型はそのままではnullを代入できません。これは、int型などは常に値を持つ必要がある設計だからです。
int number = null; // エラーになります!
このままでは、まだ決まっていない年齢やスコアなどを表現できなくて不便ですよね。そこで登場するのが「null許容型(Nullable型)」です!
3. Nullable型(null許容型)とは?
Nullable型とは、通常の値型に「nullを入れられるようにする仕組み」です。C#では、?
を使って簡単にNullable型を作ることができます。
int? age = null;
このように書くと、「年齢がまだ未定」という状態をプログラムで表すことができます。
このint?
のような書き方は、正式にはNullable<int>
という書き方と同じ意味です。
Nullable<int> age = null; // これでもOK
でも、int?
の方が短くて読みやすいので、現代のC#プログラミングでは主にこちらが使われます。
4. Nullable型の値を使うときの注意点
Nullable型の変数を使うときには、「本当に中に値が入っているかどうか」を確認する必要があります。もし値が入っていない状態(null)のまま使おうとすると、エラーになります。
int? score = null;
Console.WriteLine(score.Value); // これは例外(エラー)が発生します!
このようなときは、HasValue
というプロパティで値が入っているかどうかをチェックできます。
int? score = 80;
if (score.HasValue)
{
Console.WriteLine("点数は " + score.Value + " 点です。");
}
else
{
Console.WriteLine("点数はまだ未定です。");
}
点数は 80 点です。
5. null合体演算子(??)を使ってみよう
Nullable型を使うときによく登場するのが??
(null合体演算子)です。これは「もしnullだったら、代わりの値を使う」という処理を簡単に書ける便利な記号です。
int? age = null;
int displayAge = age ?? 20; // ageがnullなら20を使う
Console.WriteLine("表示する年齢:" + displayAge);
表示する年齢:20
このように書くと、変数がnullでも安全にプログラムを動かすことができます。
6. nullとNullable型の活用例
現実のアプリでは、まだ入力されていないデータや未決定な値を扱うことがよくあります。たとえば、次のような例が考えられます。
- ユーザーがまだ年齢を入力していない →
int?
を使ってnullで初期化 - 商品のレビューがまだ付いていない →
double?
で平均評価をnullに - オプションの電話番号 →
string?
でnullを許容
int? userAge = null;
if (!userAge.HasValue)
{
Console.WriteLine("年齢が未入力です。");
}
年齢が未入力です。
このように、nullとNullable型は、柔軟なプログラムを作るうえでとても大切なしくみです。