例外処理

「どのようなときに例外を使うか?」についての一つの考え方です。

  • 例外を使用する/しない

    通常の処理フローで発生する結果については、例外は使用しません。

例をいくつか挙げます。

  • ある条件で検索したところ、検索結果が0件だった場合、これは予期される通常の処理フローなので例外は使用しない

    一覧表示された項目の1つを選んで詳細表示をしたら、データが取れなかった場合、これは予期できない処理フローなので例外を使用する

関数に渡された引数が不正(有効範囲外)であった場合、これは予期できない処理フロー(バグ)なので例外を使用する

ユーザが画面から入力したデータが不正(有効範囲外)であった場合、これは予期できる通常の処理フローなので例外は使用しない

  • 例外処理をする/しない

    ある関数を呼び出したとき、その関数処理内で例外が発生する可能性がある場合、必ず例外処理(try-catch)を書かなくてはならないのでしょうか?

例外から回復する可能性がある場合、回復処理を書くために例外を捕捉(try-catch)する。

例)通信に失敗した場合、ネットワークの一時的な障害の可能性があるため、一定回数リトライを行う

何もできないなら、例外を捕捉せず、そのまま上(呼び出し元)に伝播させる。

やってはいけないこと

例外を捕捉して、回復処理を何もしないで(ログ出力などでお茶を濁して)次の処理に移ってしまう