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 == 3
  • 3 == 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 を使う

学習ポイント(ここが大事)

この話で本当に覚えてほしいのはここです。

  • 言語には「歴史」がある
  • 今の書き方にも「理由」がある
  • ただし今は「最適解」が変わっている

訪問数 9 回, 今日の訪問数 9回

広告

C#

Posted by hidepon