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までにしておくのが理想的です。

それ以上の深さになるような場合は、 ロジック自体を考え直した方が メンテナンス性の高いコードになります。

Python