if (a == 3) と if (3 == a) は何が違うのか?
C#のコードを読んでいると、次の2つの書き方に出会うことがあります。
if (a == 3)
{
Console.WriteLine("aは3です");
}
if (3 == a)
{
Console.WriteLine("aは3です");
}
「どっちが正しいの?」
「意味は違うの?」
最初に結論から整理しておきます。
結論:C#ではどちらも同じ
C#においては、
a == 33 == a
どちらも 完全に同じ意味 です。
どちらも「a が 3 と等しいか?」を判定しています。
ではなぜ2つの書き方が存在するのか?
ここからが重要です。
この違いは C#の話ではなく、昔の言語文化の名残 です。
昔の言語(C言語)では重大なミスが起きた
C言語では、次のようなコードが書けてしまいます。
if (a = 3)
{
// 比較ではなく代入になってしまう
}
本来は == を使うべきですが、
=(代入)==(比較)
を間違えても、エラーにならず実行される という問題がありました。
しかもこの場合、
a = 3 // 代入
の結果は「3」なので、条件は常に true になります。
つまり、
if (true)
と同じ状態になり、バグに気づきにくいのです。
そこで登場したのが「3 == a」
この問題を防ぐために使われたのが次の書き方です。
if (3 == a)
もし間違えて
if (3 = a)
と書くとどうなるか?
→ コンパイルエラーになります
理由は単純で、
- 「3」は定数なので代入できない
つまり、
書き間違えたら必ずエラーになる安全な書き方
として使われていました。
この書き方は ヨーダ記法(Yoda条件) と呼ばれます。
C#ではこの問題は起きない
C#では次のコードはエラーになります。
if (a = 3) // コンパイルエラー
つまり、
- 代入ミスは防げる
- わざわざ逆に書く必要はない
という状態になっています。
実務でどちらを書くべきか?
ここは非常にシンプルです。
if (a == 3)
これを使ってください。
理由は1つです。
可読性(読みやすさ)が圧倒的に重要
コードは「動くこと」だけでなく、
他人(未来の自分)が読めることが重要です。
a == 3→ 自然(aが主語)3 == a→ 少し違和感がある
特に学習段階では、
「コードを見てすぐ意味が分かる」
ことが非常に重要です。
まとめ
- C#では
a == 3と3 == aは同じ 3 == aはC言語時代のバグ対策- C#では不要
- 基本は
a == 3を使う
学習ポイント(ここが大事)
この話で本当に覚えてほしいのはここです。
- 言語には「歴史」がある
- 今の書き方にも「理由」がある
- ただし今は「最適解」が変わっている




ディスカッション
コメント一覧
まだ、コメントがありません