正常前提と異常前提の違い

「正常を前提として、異常があれば異常終了」と「異常を前提として、異常がなれけば正常終了」。

日本語としては同じ意味に聞こえるが、この2つはプログラムを書く上で別物になります。

正常を前提として、異常があれば異常終了

try {
    /* 通常処理 */
} catch (/* 例外 */) {
    /* 異常処理 */
}
return /* 正常終了 */

現場でしばしばこの様な実装を見るが、エラーが発生しても正常終了になるバグコードです。

catchで「return /* 異常終了 */」すれば良いのだが忘れてしまうのか、気にしてないのか。

それはそれで問題だが、忘れたからと言って正常終了にしてしまう構造も問題なので直すべきでしょう。

異常を前提として、異常がなれけば正常終了

try {
    /* 通常処理 */
    return /* 正常終了 */
} catch (/* 例外 */) {
    /* 異常処理 */
}
return /* 異常終了 */

まず、一番最後に来るreturnを異常終了にしてしまえば問題があれば異常終了にできます。

正常終了を忘れることは無いと思うが、忘れたとしても異常終了できます。

try {
    /* 通常処理 */
    return /* 正常終了 */
} catch (/* 例外1 */) {
    /* 異常処理1 */
    return /* 異常終了1(想定エラー) */
} catch (/* 例外2 */) {
    /* 異常処理2 */
    return /* 異常終了2(想定エラー) */
}
return /* 異常終了(予期せぬエラー) */

より詳細に実装することで、「想定されるエラー」と「予期せぬエラー」を分けて対処することも可能になります。

ログ出力を適切に行う事で、予期せぬエラーを検知しやすくなるので「異常を前提」の実装、おすすめです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です