14

void を宣言するのではなく、操作が成功したことを示すために、メソッド シグネチャでブール値を返すことに関して厳格な規則はありますか? 呼び出しメソッドのより重要な操作については、操作が完了したかどうかを知りたいので、問題をログに記録できることがわかりました。これはブール値の「不適切な」使用ですか?

4

9 に答える 9

22

通常、私はExceptions を使用して、何か問題が発生したことを知らせます。

を返す代わりに、問題の内容に関する詳細なメッセージを返すfalseことができます。throwException

戻っfalseても、問題に関する多くの情報は得られません。

次に、戻り値をチェックする代わりに、メソッドが簡単に失敗することが予想される場合はfalse、メソッド呼び出しをtry/に入れます。catch

多くの人は、この方法が遅いと文句を言うでしょう。しかし、あなたが得る利益は減速を大きく上回ります。さらに、Java を使用している場合、速度は最大の関心事ではありません。

于 2010-01-28T16:25:41.843 に答える
6

通常、プロセスが成功したかどうかは気にしないため、失敗した場合に例外をスローする方が、ブール値を返すよりもはるかに優れたソリューションであることがわかります。プロセスが失敗した場合のみ気にします。例外を使用することで、プロセスが実際に失敗した理由に関する情報をいくらでも提供できます。

例外が不快に思われる場合は、ブール値とステータス メッセージを含むカスタム Status オブジェクトを返すことができます (「6 つの新しい Foobar が追加されました!」または「Foobin がいっぱいであるため、Foobar を追加できませんでした!」など)。より複雑です。

于 2010-01-28T16:26:08.010 に答える
4

これは、結果がブール値であることが明らかなシナリオでのみ行ってください。のようIsValidCustomer()なもの。

導入できると思われる他のすべてのものについては、おそらく何らかの種類の を扱っていることを意味し、単純な booleanでExceptionそれをラップしたくない. true/false) と、何かがうまくいかない理由について、知りたいと思うでしょう。

したがって、例外をスタックにバブルアップさせるか、それをキャッチしてカスタム例外に変えるか、ログに記録するか、何でもかまいません。

于 2010-01-28T16:31:59.347 に答える
2

ブール値を使用して、例外的でない障害の結果を示します。例として、検索関数があります。名目上の障害は見つかりませんでした。例外を除いてその結果を伝えるのは扱いにくいです。例外的な場合の例外を保存します。notfoundcannot-searchの違い。

于 2010-01-28T18:26:36.840 に答える
1

予期しない結果が発生した場合は、例外をスローします。関数に「Xを実行しましたか」と通知するだけの場合は、ブール値を返します。

于 2010-01-28T16:45:46.937 に答える
1

実際には、失敗によってプロセスを中止する必要がある場合は、例外をスローするのが最善の方法であることがわかりました。同様に、注文を処理しようとしている場合 (顧客への請求、配送の手配、消費税の支払いなど)、注文記録が見つからない場合、他のすべての作業を行う意味はほとんどありません。あなたはそこから抜け出したいだけです。例外を使用すると、これを簡単に行うことができます。ブロックの下部でキャッチし、エラーを表示またはログに記録して、脱出するだけです。

一方、「エラー」が私のプログラムが別のフロー パスを取ることを意味する場合は、ブール値を返す方が理にかなっています。たとえば、特定の顧客を探していて、存在する場合はレコードを更新し、存在しない場合は新しい顧客レコードを作成する場合、ブール値を返し、呼び出し元でそれをテストすることは非常に理にかなっていますtrue の場合は一方のパスをたどり、false の場合は他方のパスをたどります。

実際、これは「エラー」という言葉の 2 つの非常に異なる意味であり、異なる処理が求められます。同じ関数で両方を実行できる可能性は十分にあります。同様に、見つかった場合は true を返し、見つからない場合は false を返し、I/O エラーが読み取ろうとすると例外をスローします。

于 2010-01-28T17:41:56.227 に答える
1

これは問題のないパラダイムですが、操作が正常に完了しないケースを呼び出し元に強制的に処理させたい場合は、代わりにチェック例外をスローすることをお勧めします。

ただし、このパターンはコア Java ライブラリで発生します。例としてFile.delete()を参照してください。

于 2010-01-28T16:25:25.453 に答える
1

一般的に成功を返す場合、次のように表示されます。

  • ブール値を返す
  • void を返しますが、エラーの場合は例外をスローします
  • ステータス コードを返します (Java ではあまり一般的ではありません)。

例外の動作に関する情報が必要でない限り、成功のためにブール値を返すことに問題はありません。

于 2010-01-28T16:26:00.523 に答える
0

大丈夫そうに見えますが、悪魔は細部に潜んでいます。;-)

例外をスローすることは、長所と短所がある主な代替手段です。

正確なコーディングサンプルを提供することで、より多くの洞察を得ることができると思います...

于 2010-01-28T16:26:30.740 に答える