導入
プログラミングを始めたばかりの方が最初にぶつかる壁の一つが「if文のネスト(入れ子構造)」です。条件の中にさらに条件を記述することで、複雑な判断をプログラムにさせることができます。しかし、深くネストしすぎるとコードが右側にどんどん寄ってしまい、非常に読みづらく、バグの温床になりがちです。本記事では、基本的な使い方と、現場で好まれる「読みやすい書き方」について解説します。
基礎知識
if文とは、特定の条件が満たされたときにだけ特定の処理を実行する「制御構造」です。ネストとは、あるif文のブロック({ }の中)に、別のif文を記述することを指します。これにより、「AかつBの場合」といった複合的な条件を段階的に評価できます。
実装/解決策
ネストを深くしないための最も有効なテクニックは、「早期リターン(ガード節)」という考え方です。条件が満たされない場合にすぐに処理を終了(return)させることで、elseを使わずにネストを浅く保つことができます。これにより、コードの論理構造がフラットになり、メンテナンス性が劇的に向上します。
サンプルプログラム
以下のコードは、ネストが深い悪い例と、早期リターンを使って改善した良い例の比較です。
include <iostream>
// ネストが深い例(可読性が低い)
void processDeep(int x, int y) {
if (x > 0) {
if (y > 0) {
std::cout << "xもyも正です。" << std::endl;
}
}
}
// 早期リターンを使った例(読みやすい)
void processFlat(int x, int y) {
// 条件を満たさない場合は先に処理を終える
if (x <= 0) return;
if (y <= 0) return;
// ここまで到達すれば確実に両方正
std::cout << "xもyも正です。" << std::endl;
}
int main() {
processDeep(10, 20);
processFlat(10, 20);
return 0;
}
応用・注意点
現場でコードを書く際は、「ネストは最大でも2階層まで」というルールを設けているチームも少なくありません。もし3階層以上のネストが必要になった場合は、その処理自体を別の関数に切り出せないか検討してみてください。また、論理演算子(&&や||)を活用することで、if文を一つにまとめることも可能です。可読性を常に意識し、後から読む人が迷わないコードを目指しましょう。

コメント