追記:多数回答ありがとうございます、聞きたいことを具体的に書くと、BadFunctionCallException であるとか、OverflowException とかを業務で書いたことがないのですが、どんな場合書くべきで、どんな場合省力した方がコードのスリム化につながり書くべきではないかという点です。
上記のみに回答させていただきます。
まず、OverflowExceptionとか書いたことが無い、という事はきちんと条件分岐でエラーを捕らえられていると言う事で、良いことかと思います(きちんと動いていればですがね、、)。
会社や組織の方針でも違うかもしれませんが、私などは、基本は、
「例外」
とはいわゆる、
「想定外」
の範疇のみの処理方法だと考えています。
基本的には、まずは、
「例外が発生しない」
というのが最優先条件でプログラムは組まれるべきであると思っています。
if文などの、分岐構造で、基本的にできる限りの条件洗い出し、分岐を行う事が必要で、意図した流れのみにするべきです。
たとえばOverflowExceptionについては、その前段の計算部分にて、オーバーフローしないうように、逆にオーバーフローするようなら、パラメータが範囲外だよ、と呼び出し元にエラーとして戻すのが最優先です。それであれば、OverflowExceptionは必要ありません。
例外を使うのは
・本当に想定していない場合(そんな事がいつ起こるかな?と、やもやと想像して実装する)
・使っているライブラリなどが例外を出す仕様の場合(しょうがないから使う)
・どうやっても、その先に進めないような場合に使う
=>これは、例えば、
int arrayValue(int index){
return a[index];
}
のような、関数の場合、indexに配列外の値が設定された場合には、メモリ不正アクセスで死亡という事態になってしまうため、この場合はしょうがないので例外を使います。
int arrayValue(int index){
if(inxd >= MAX_ARRAY)throw(xxxx);
return a[index];
}
程度に絞るべきだと思います。
基本は、if文です。
最後に・・・
・簡略化
・エラーが発生したあとの動作についてあまり重要性が無いような場合
において、たとえばすべてOverflowExceptionで受けて、エラーとして、戻す実装をする事もまれにありますが、パラメータ違いでの意図的な例外なのか、想定外のパラメータでの例外なのかわからなくなってしまうので、あまり本来の姿ではないと思っています。
例外とは、どちらかというと、ライブラリなどを提供する側が、使用者側の想定がすべて受け止められない場合があるため、(上記のarrayValue関数のような)に使用すべきものであるので、
そのような例外が、頻発することは、そもそもの使用方法の誤りかと思います。
よって、意図的に例外をキャッチする機会は、あまりあってはならないのが、本来の姿かと。
ご参考になれば。