MW211 EXIT

devlog
ガード節
2017年10月03日
「break」や「continue」を使って、処理を回避する方法である。
┌──────────────────────────────────────┐
│for (ループ条件) {                                                          │
│    if (終了条件) {                                                         │
│        break;                                                              │
│    }                                                                       │
│    if (スキップ条件) {                                                     │
│        continue;                                                           │
│    }                                                                       │
│    処理;                                                                   │
│}                                                                           │
└──────────────────────────────────────┘
これらを使わないと(真の構造化プログラミングだと)、
以下のようにネストで対処せねばならなくなり、ネストが深くなる。
┌──────────────────────────────────────┐
│for (ループ条件) {                                                          │
│    if (!終了条件) {                                                        │
│        if (!スキップ条件) {                                                │
│            処理;                                                           │
│        }                                                                   │
│    }                                                                       │
│}                                                                           │
└──────────────────────────────────────┘
前者は縦に、後者は横に広がっていく感じである。

ちなみに、サブ関数においても同じ様に使える。
┌──────────────────────────────────────┐
│function func() {                                                           │
│    for (ループ条件) {                                                      │
│        if (終了条件) {                                                     │
│            return 戻り値;                                                  │
│        }                                                                   │
│        if (スキップ条件) {                                                 │
│            continue;                                                       │
│        }                                                                   │
│        処理;                                                               │
│    }                                                                       │
│    return 戻り値;                                                          │
│}                                                                           │
├──────────────────────────────────────┤
│function func() {                                                           │
│    for (ループ条件) {                                                      │
│        if (!終了条件) {                                                    │
│            if (!スキップ条件) {                                            │
│                処理;                                                       │
│            }                                                               │
│        }                                                                   │
│    }                                                                       │
│    return 戻り値;                                                          │
│}                                                                           │
└──────────────────────────────────────┘
なお、戻り値をデバッガで参照したい場合には、
後者はブレークポイントが一箇所で済むというメリットがある。

とはいえ、前者の方が圧倒的に見やすいと思うのだが。。。
分類:設計