それは好みの問題と慣習の問題の間のどこかです。
一般に、人々は assert を使用してプログラミング エラーを示します。つまり、「私が自分の仕事を正しく行っていれば、ユーザー入力やその他の外部の力に関係なく、 null 以外の結果が -1 になることはありparam
ません。」get
私はそれらをほとんどコメントとして扱い、オプションで実行時に検証することができます。
一方、場合get
によっては -1 を返す可能性がありますが、その入力が無効な場合は、通常、 をスローIllegalArgumentException
しcheckArgument
ます。これは、これを行うための完全に合理的な方法です。これの欠点の 1 つは、後でそれを見つけたときに、ほとんどどこからでも来た可能性があることです。検討:
try {
baz();
bar();
foo(myInput);
} catch (IllegalArgumentException e) {
// Where did this come from!?
// It could have come from foo(myInput), or baz(), or bar(),
// or some method that any of them invoked, or really anywhere
// in that stack.
// It could be something totally unrelated to user input, just
// a bug somewhere in my code.
// Handle it somehow...
}
それが重要な場合、たとえば、ユーザーが入力フォームに入力することを許可されていないことをユーザーにポップアップ表示したい場合など-1
、カスタム例外をスローして、より簡単にキャッチできるようにすることができます。それは後で:
try {
baz();
bar();
foo(myInput);
} catch (BadUserInputException e) {
reportError("Bad input: " + e.getMessage());
log.info("recorded bad user input", e);
}
に関してはcheckState
、私には正しく聞こえません。この例外は通常、問題があった状態this
(または、アプリケーション内の他のよりグローバルな状態) にあったことを意味します。ドキュメントから:
メソッドが不正または不適切なタイミングで呼び出されたことを示します。
あなたの場合、 -1 は決して適切ではないため、checkState
誤解を招きます。今、それがあった場合:
if (x == -1 && (!allowNegativeOne()) { ... }
...それなら、上記の欠点がまだありますが、より適切IllegalArgumentException
です。
最後に、 をそのままにif
しておくべきか、それともヘルパー メソッドを使用するべきかという問題があります。それは、好み、チェックの複雑さ、使用頻度 (他の方法など) にかかっています。チェックが単純でx == -1
、そのチェックが他の方法で実行されない場合 (コードの再利用は問題になりません) if
、.