例外を使用して問題を早期に発見します。例えば:
public int getAverageAge(Person p1, Person p2){
if(p1 == null || p2 == null)
throw new IllegalArgumentException("One or more of input persons is null").
return (p1.getAge() + p2.getAge()) / 2;
}
私のプログラムはnull
この関数を決して渡すべきではありません。私はそれをするつもりはありません。しかし、私たち全員が知っているように、プログラミングでは意図しないことが起こります。
この問題が発生した場合に例外をスローすると、プログラムの他の場所でさらに問題が発生する前に、それを見つけて修正することができます。例外はプログラムを停止し、「ここで悪いことが起こったので修正してください」と言っています。これnull
がプログラム内を移動する代わりに、他の場所で問題を引き起こします。
さて、あなたは正しいです。この場合、これはただちにすぐにnull
発生するNullPointerException
ため、最良の例ではないかもしれません。
しかし、たとえば次のような方法を検討してください。
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
この場合、null
as asパラメータはプログラムの周りに渡され、はるか後にエラーが発生する可能性があり、そのエラーを元に戻すのは困難です。
関数を次のように変更します。
public void registerPerson(Person person){
if(person == null) throw new IllegalArgumentException("Input person is null.");
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
他の場所で奇妙なエラーが発生する前に問題を見つけることができます。
また、null
パラメーターとしての参照は単なる例です。無効な引数から他のものまで、さまざまな問題が発生する可能性があります。それらを早期に発見することは常に良いことです。
だから私の質問は単純です:これは良い習慣ですか?問題防止ツールとしての例外の使用は適切ですか?これは例外の正当なアプリケーションですか、それとも問題がありますか?