Python: if文のネスト(入れ子)と階層について
ネスト(入れ子)とは、if文の中にif文を入れたり、
for文の中にfor文を入れたりすることです。
Pythonでも、他のプログラミング言語と同じように
ネストすることができます。
ここではif文のネストについて解説します。
if文をネストする場合、次のように記述します (elifやelse句は省略)。 条件式AがTrueの場合に処理1を行い、 さらに条件式BがTrueであれば処理2を行います。
if 条件式A: 処理1 if 条件式B: 処理2
ネストしたいif文を、 処理1と同じインデントの場所で記述します。 条件式BがTrueの場合に実行される処理2は、 さらにインデントして記述します。
上のコードの条件Aや条件Bの真偽値(True/False)によって実行される処理を 表にすると下表のようになります。
条件AがTrue | 条件AがFalse | |
---|---|---|
条件BがTrue | 処理1+処理2 | なし |
条件BがFalse | 処理1 | なし |
else句も入れたif文のネストのコードは次のようになります。
if 条件A: if 条件B: 処理1 else: 処理2 else: if 条件C: 処理3 else: 処理4
Pythonはインデントでブロックの範囲を指定するので、 インデントの深さが構造の深さを表します。 そのため、インデントが強制されていない他のプログラミング言語よりも ネストされたコードが見やすいというメリットがあります。
ネスト(入れ子)の階層は3まで
if文をネストする時は、
if文の階層(深さ)に注意してください。
if文が2重構造になっている場合、階層(深さ)が2と言います。
次のコードはネストの階層が3のコードです。
if 条件1: if 条件2: if 条件3: 処理
階層が2のコードよりも見にくくなっていると思います。
さらに階層が4のコードは次のように、
もっとわかりにくくなります。
if 条件1: if 条件2: if 条件3: if 条件4: 処理
このように、ソースコードはネストの階層が深くなるほど 可読性が悪くなります。 階層はできれば2まで、 多くても3までにしておくのが理想的です。
それ以上の深さになるような場合は、 ロジック自体を考え直した方が メンテナンス性の高いコードになります。