※ この記事にはアフィリエイトリンクが含まれます
C#のif文の書き方や挙動で悩んでいませんか?
・条件が正しく評価されず期待通りに動かないことがある
・elseやelse ifの使い分けがわからない
・複雑な条件式で可読性やバグが心配になる
結論から言うと、if文の基本を押さえれば多くの問題は解決します。
・基本構文の理解
・条件式の書き方(比較・論理演算子)
・よくある落とし穴の回避方法
この記事を読むと、C#のif文を正しく、安全に書けるようになり、バグを減らして可読性の高いコードを書けるようになります。
if文の基本構文と役割
まずはif文の最も基本的な書き方を確認します。
if文は条件に応じて処理を分岐させるための構文です。
if (条件)
{
// 条件がtrueのときに実行
}
この単純な形だけでも多くの分岐処理を表現できます。
次は実際の値を使った具体例です。
int x = 10;
if (x > 5)
{
Console.WriteLine("xは5より大きい");
}
elseとelse ifの使い分け
条件が成り立たなかった場合の処理を追加するにはelseを使います。
さらに複数の候補に分岐させたい場合はelse ifを使います。
int score = 75;
if (score >= 90)
{
Console.WriteLine("A") ;
}
else if (score >= 70)
{
Console.WriteLine("B") ;
}
else
{
Console.WriteLine("その他") ;
}
上から順に評価され、最初に条件が真になったブロックが実行されます。
重要なのは、いったん真となるとそれ以降は評価されない点です。
条件式の書き方と注意点
条件式には比較演算子や論理演算子を使います。
よく使う演算子は次の通りです。
- ==, !=(等しい・等しくない)
- >, <, >=, <=(大小比較)
- &&, ||(論理積(AND)・論理和(OR))
- !(否定)
特に注意したいのは==と=の違いです。
C#では=は代入、==は等価比較なので混同しないようにしましょう。
// NG: if (x = 5) はコンパイルエラーになります
int x = 0;
// OK:
if (x == 5)
{
// 処理
}
nullチェックの注意
参照型やnullable型を扱うときはnullチェックが必要です。
nullをそのまま比較するとNullReferenceExceptionの原因になることがあります。
string s = null;
if (s != null && s.Length > 0)
{
Console.WriteLine(s);
}
上のように短絡評価(左辺がfalseなら右辺を評価しない)を利用すると安全です。
ネストしたifと可読性の工夫
複雑な条件でネストが深くなると可読性が低下します。
ネストを減らす工夫として早期リターンやガード節を使う方法があります。
// ネストが深い例
if (user != null)
{
if (user.IsActive)
{
// 処理
}
}
// 改善例(早期リターン)
if (user == null) return;
if (!user.IsActive) return;
// 処理
早期リターンにより上から順に処理が読めるため理解しやすくなります。
また、条件を説明する変数名でラップするのも有効です。
bool canProceed = user != null && user.IsActive;
if (canProceed)
{
// 処理
}
論理演算子を使った複合条件
複数の条件を組み合わせることで柔軟な判定ができます。
ただし、優先順位や括弧を意識しないと意図しない評価になることがあります。
int a = 5, b = 10;
if (a < 10 && (b == 10 || b == 20))
{
// 条件を満たす
}
括弧で条件のグループ化を行うと安全に意図を表現できます。
論理演算子の短絡評価
&&と||は短絡評価を行うため、左辺によって右辺の評価がスキップされます。
これを利用すればnullチェックと組み合わせた安全なコードが書けます。
if (obj != null && obj.IsValid())
{
// objがnullでなく、有効なときだけ実行
}
よくあるエラーとその対処法
初心者がはまりやすいポイントをまとめます。
代表的なミスと解決方法を実例で示します。
- 代入演算子と比較演算子の混同 → ==を使う
- nullチェックの不足 → &&で短絡評価を利用する
- 浮動小数点の比較 → 直接比較ではなく差の絶対値で比較する
- 順序の重要性を無視した条件式 → 優先順位を括弧で明示する
それぞれの対処例をコードで示します。
// 浮動小数点の誤差を考慮した比較
double x = 0.1 * 3;
double y = 0.3;
if (Math.Abs(x - y) < 1e-9)
{
Console.WriteLine("ほぼ等しい");
}
実践的な使い方と設計のコツ
if-elseが増えると保守が難しくなります。
対策として戦略パターンや辞書を使った置き換えが有効です。
// Dictionaryで条件分岐を置換する例(擬似コード)
var actions = new Dictionary<int, Action>
{
{1, () => DoA()},
{2, () => DoB()}
};
if (actions.ContainsKey(key)) actions[key]();
このように分岐をデータで表現すると拡張が容易になります。
また、条件が多い場合はenumやswitch式の活用も検討してみましょう。
デバッグとテストのポイント
if文のバグはテストケースで露出しやすいので単体テストを充実させましょう。
境界値やnull、想定外の入力を含めてケースを作成するのが重要です。
// 例: NUnitのテストケース(概念)
[Test]
public void Test_IsAdult()
{
Assert.IsTrue(IsAdult(18));
Assert.IsFalse(IsAdult(17));
}
ログ出力を適切に入れて条件評価を追跡することもデバッグに有効です。
練習問題で理解を深める
学んだ内容は手を動かして確認するのがいちばんです。
以下のような問題に挑戦してみてください。
- 入力された整数が正の偶数か判定する関数を作成する
- 3つの数値から最大値を返す処理をif文のみで実装する
- メールアドレスっぽい文字列かを簡易チェックする(’@’ を含むか)
解答例は自身で実装して動かし、境界条件を試してみましょう。
まとめ:今日から使えるC# if文のポイント
ここまでの要点を整理します。
まず基本構文とelse/else ifの使い分けを押さえてください。
条件式では比較演算子と論理演算子の優先順位に注意し、nullチェックを忘れないことが重要です。
ネストが深くなったら早期リターンや変数でラップするなどして可読性を高めてください。
最後に、テストとログで動作を確認する習慣をつけるとバグを減らせます。
この記事を参考にして、まずは簡単な例から手を動かしてみてください。

エンジニアとして、もっと自分の力を活かしたいあなたへ
「このまま今の職場にいて、成長できるんだろうか?」
C#を使っている方なら、一度はそう感じたことがあるかもしれません。
実は今、C#/.NETエンジニアの市場価値は高まっており、
年収アップ・フルリモート・自社開発企業など、選べる選択肢は確実に増えています。
もし今後、C#を活かして働きたい、あるいは開発現場で経験を積みたいとお考えなら…
自分に合った転職サービスを早めに知っておくことが大きな武器になります。
現役エンジニアからのサポート付き・無料で学べるスクール・社内SE特化の求人など、
転職支援サービスを厳選したまとめ記事をこちらで紹介しています。

ここまで読んでいただきありがとうございました。
コメント