No Programming, No Life

プログラミング関連の話題や雑記

for文内のif文のネストをcontinueで回避

C系の文法の言語で、for文の内部の処理でif文が
ずらずらとネストされているケースを回避する方法として
if文の否定条件だったらcontinueするという方法がある。

例)ネストしまくりのif文
for (int i = 0; i < length; i++) {
  if (condition1) {
    if (condition2) {
      if (condition3) {
        if (condition4) {
          何らかの処理
            :
            :
            :
        }
      }
    }
  }
}

これを以下のように修正します。

例)ネストしまくりのif文(修正版)
for (int i = 0; i < length; i++) {
  if (!condition1) continue;
  if (!condition2) continue;
  if (!condition3) continue;
  if (!condition4) continue;
  何らかの処理
    :
    :
    :
}

この方がすっきりしていて見やすい。

ただし、for文の内部の処理がif文ネストの外にも
あった場合はこのテクニックは使えないので注意が必要。

例)if文ネストの外にも処理がある場合
for (int i = 0; i < length; i++) {
  if (condition1) {
    if (condition2) {
      if (condition3) {
        if (condition4) {
          何らかの処理1
            :
            :
            :
        }
      }
    }
  }
  何らかの処理2
    :
    :
    :
}

こういう場合は使えない。
continueで回避できるのは、if文でネストされた処理のみが
for文の内部にある場合である。