カテゴリ: C# 更新日: 2025/11/24

C#のnull合体演算子(??)の使い方!デフォルト値を設定する便利技

C#のnull合体演算子(??)の使い方!デフォルト値を設定する便利技
C#のnull合体演算子(??)の使い方!デフォルト値を設定する便利技

先生と生徒の会話形式で理解しよう

生徒

「C#で、変数がnullだった場合に別の値を使いたいときって、どう書けばいいんですか?」

先生

「そういうときには、??(null合体演算子)を使うと便利ですよ。」

生徒

「null合体演算子ってなんですか?聞いたことがありません…」

先生

「それでは、null合体演算子が何か、そしてどんな場面で使うのかをわかりやすく説明していきましょう。」

1. null合体演算子(??)とは?

1. null合体演算子(??)とは?
1. null合体演算子(??)とは?

C#のnull合体演算子(??)は、変数がnullかどうかを判定し、nullなら別の値を使うというとても便利な書き方です。

「null(ヌル)」とは、何も値が入っていない状態のことを指します。たとえば、箱(変数)が空っぽのときに、代わりのもの(デフォルト値)を使いたい場面がありますよね。

そんなときに活躍するのが、この??という記号です。

2. null合体演算子の基本構文

2. null合体演算子の基本構文
2. null合体演算子の基本構文

基本的な使い方はとてもシンプルです。


string name = null;
string displayName = name ?? "名無しのユーザー";
Console.WriteLine(displayName);

このコードの意味は、「nameがnullなら、displayNameには”名無しのユーザー”を入れてね」ということです。


名無しのユーザー

もしnameに何か値が入っていれば、その値がそのままdisplayNameに入ります。

3. null合体演算子を使わない場合の面倒な書き方

3. null合体演算子を使わない場合の面倒な書き方
3. null合体演算子を使わない場合の面倒な書き方

??を使わないと、同じ処理でも以下のように少し長くなってしまいます。


string name = null;
string displayName;

if (name != null)
{
    displayName = name;
}
else
{
    displayName = "名無しのユーザー";
}

Console.WriteLine(displayName);

これを??を使えば、たった1行で書けるので、コードもスッキリして読みやすくなります。

4. 数値やbool型でも使える

4. 数値やbool型でも使える
4. 数値やbool型でも使える

null合体演算子は、文字列だけでなく、int型やbool型など他の値型(value type)でも使えます。

ただし、int型やbool型は通常nullを入れることができません。そのため、「nullable型」(ヌラブルがた)として使う必要があります。

nullable型とは、int?bool?のように、「?」をつけてnullを許容できる型です。


int? number = null;
int result = number ?? 0;
Console.WriteLine(result);

0

この例では、numberがnullなので、resultには0が入ります。

5. null合体演算子を使った実用的な例

5. null合体演算子を使った実用的な例
5. null合体演算子を使った実用的な例

たとえば、ユーザーから名前を入力してもらうとき、空だったら「ゲスト」と表示したい場合はこう書けます。


Console.WriteLine("あなたの名前を入力してください:");
string input = Console.ReadLine();
string userName = input ?? "ゲスト";
Console.WriteLine("ようこそ、" + userName + "さん!");

Console.ReadLine()は、何も入力されないとnullになる場合があるため、null合体演算子でフォローすることで、安全にデフォルト値を設定できます。

6. null合体演算子とnull条件演算子の違い

6. null合体演算子とnull条件演算子の違い
6. null合体演算子とnull条件演算子の違い

似た名前で混乱しやすいのが、null条件演算子(?.)です。

これは、オブジェクトがnullかどうかを調べて、安全にプロパティなどへアクセスするための演算子です。

一方、??は、「nullだったときに代わりの値を使う」ための演算子です。目的が異なるので、混同しないようにしましょう。

7. null合体演算子は省略の美学

7. null合体演算子は省略の美学
7. null合体演算子は省略の美学

プログラムを書くときは、できるだけ短く・読みやすく・安全に書くのが理想です。

if文で長々と書かなくても、null合体演算子を使えば、1行でnullチェックとデフォルト値の代入が同時にできるので非常に便利です。

初めてプログラミングを学ぶ方にとっても、読みやすいコードが書けるようになる第一歩として、??の使い方をぜひ覚えておきましょう!

まとめ

まとめ
まとめ

C#でプログラムを書くとき、「この変数は中身があるかな?」「もし空っぽだったら別の値を使いたいな」という場面は意外と多いものです。特にユーザー入力や外部データを扱うと、nullが入ってしまうことは珍しくありません。そこで役立つのが、このページで学んだnull合体演算子(??)という便利な文法です。null合体演算子は、変数がnullならデフォルト値、nullでなければそのままの値を使えます。たった二文字の記号で、読みやすく、スッキリしたコードに変わるため、初心者から上級者まで幅広く使われています。

もしnull合体演算子を使わない場合は、if (変数 != null)のようなチェックを書き、elseで別の値を設定しなければいけません。これではコードが長くなり、同じような条件が増えるにつれ、見通しが悪くなってしまいます。こうした冗長な処理を省き、ひと目で「nullだったらこの値を使うんだな」と読み取れるのがnull合体演算子の強みです。C#でよく使われる基本構文のひとつですから、普段から意識して書いてみると、自然に身に付いていきます。

文字列に使う例

たとえばユーザー名が取得できなかったとき、自動的に「ゲスト」扱いにできます。


string name = null;
string userName = name ?? "ゲスト";
Console.WriteLine("ようこそ " + userName + " さん");

もしnameに値が入っていればそのままuserNameになりますし、nullであれば「ゲスト」が設定されます。このように、プログラム側で安全なデフォルト値を準備しておくことで、急なエラーや想定外の動作を防ぐことができます。

数値やboolにも使える例

null合体演算子は文字列だけでなく、intやboolといった値型でも活躍します。ただし、値型はそのままではnullを入れられないため、nullable型にして扱います。


int? point = null;
int total = point ?? 0;
Console.WriteLine("合計ポイントは " + total + " です");

pointがnullなら0、値が入っていればその数が使われます。if文を書かなくても成立するので、初心者にも理解しやすく、読みやすい構造になります。

null条件演算子との違い

よく似ている演算子に?.という記号があります。こちらは「オブジェクトがnullじゃなければプロパティにアクセスする」という意味を持ちます。null合体演算子は「nullならデフォルトを付ける」、null条件演算子は「nullなら先に進まず止まる」。目的が違うため、使い方も異なります。どちらも安全にプログラムを動かすために重要な存在なので、少しずつ違いを覚えていくと良いでしょう。

実用的な例:画面入力や外部データで活躍

実際のアプリケーションで一番出番が多いのは、ユーザー入力やファイル、データベースからの読み込みです。外部から取り込むデータは、必ずしも期待通りの値が入ってくるとは限りません。そのため、初期値や代替値を用意しておくと、予期しない停止や例外を回避できます。


Console.WriteLine("好きな色を入力してください:");
string input = Console.ReadLine();
string color = input ?? "未設定";

Console.WriteLine("あなたの選んだ色:" + color);

入力が空だった場合にも、「未設定」と表示できるため、アプリが無言のまま止まることを防ぎます。こうした細かい積み重ねで、ユーザーにとって使いやすいプログラムに育っていきます。

条件が増えても読みやすさを保てる

プログラムは規模が大きくなるほど、条件分岐が増えます。同じようなif文ばかりが並ぶと、どこが重要なのか分かりづらくなります。null合体演算子を使えば、値の確認と代入が同時にできるので、横に広がりやすいコードを短くまとめられます。読みやすさが保たれることで、修正や追加も簡単にできます。

よくある間違い

null合体演算子は便利ですが、値型を扱うときにはnullable型にしないと使えません。たとえばを使い忘れてint result = number ?? 0;とすると、numberがnullを受け取れないのでエラーになります。また、??の前後に値を付け忘れたり、「nullかどうか判定しているつもりで違う処理を書いていた」というケースもあります。丁寧にチェックしながら書けば問題ありませんが、慣れるまでは一行ずつ確認してみるとよいでしょう。

プログラムの見た目を整える小さな工夫

コードは自分が書くだけのものではありません。他の人が読むかもしれないし、数ヶ月後の自分が読み返すかもしれません。そのとき、if (x == null)が何度も並ぶより、x ?? "〇〇"と書かれているほうが意図が伝わりやすくなります。短い記述で意味を明確にできるのは、プログラミングにおいて大きな強みです。

総合的な振り返り

null合体演算子は、C#のコードを短くまとめる便利な道具であり、プログラムの品質を上げる小さな工夫でもあります。初心者にもわかりやすい書き方なので、今日学んだ内容を実際のコードに組み込んでみると、違いが実感できるはずです。if文を長く書かなくても済む、読み手に優しいコードが書ける、nullによるエラーを防げるという三つの利点を意識しながら、ぜひ習慣にしていきましょう。

先生と生徒の振り返り会話

生徒

「null合体演算子って、こんなに便利だとは知りませんでした!」

先生

「ちょっとしたところで使えるから、小さな条件をきれいに整理できますよ。」

生徒

「if文を減らせるだけでも、見た目がすごくスッキリしますね。」

先生

「そうなんです。読みやすいコードは、バグも少なくなるんです。次は値型のnullableも活用してみましょう。」

生徒

「はい、いろいろ試してみます!入力が空でも動くようにできるのは嬉しいですね。」

先生

「その意識が大事です。安心して動くプログラムを書くほど、自信もついてきますよ。」

カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.4
Java&Spring記事人気No4
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方