質問

ドメインクラス内で例外処理の代わりにアサーションを使用する状況はありますか...

役に立ちましたか?

解決

クラスのユーザーが意図したとおりにそれらを使用していることを検証するパラメーター検証およびその他のチェックに例外を使用します。

内部の整合性チェックにアサーションを使用します。つまり、クラスのユーザーではなく、あなたがめちゃくちゃになったことを示します。

したがって、クラスのユーザーがアサーションの失敗に気付いた場合、それは(おそらく)コードの使用ではなく、コードの内部エラーであることを知っています。一方、パラメータ取得例外を取得した場合、彼らはそれが彼らのせいだと知っています。

他のヒント

決して。アサーションは、エラー処理の有効な形式ではありません。これらを使用して、テスト中のプログラムエラーの特定を支援します。

アサーションは、発生するべきではなく予期されていなかった状態を反映します。アプリケーションは何らかの理由で実行を継続できません。一方、例外は、「正常」とは見なされないが予期しない状態を示します、そこから回復できる可能性があります。

例として、ヒープにスペースを割り当て、この割り当てが失敗した場合、作業を続行できないため、返されたアドレスが有効であると断言します。無効な場合、アサーションは失敗し、プログラムは失敗します。

一方、読み取り用にファイルを開いて、それが存在しない場合、状況から回復できる可能性があります。その場合、例外がスローされ(そしてキャッチされ、可能)。

一般に、アサーションはデバッグ段階で最も役立ちますが、例外は通常のプログラムフローとエラー処理の一部と見なされます。一般的なコンセンサスは、実稼働コードでアサーションを無効にする必要があるということです(見かけのクラッシュからユーザーを保護するため)。問題を適切に報告できます。

個人的には、2つの手法を組み合わせることがあります。通常、スローされる可能性があるとは思わない例外をキャッチしている場合。上記の例を使用すると、ファイルを開く前にその存在を確認した場合、例外がスローされることは期待されていません。例外がある場合は、関連するcatchブロックでアサーションを上げることでこれに対処する傾向があります。このような例外が完全にチェックされるJavaでは、これが特に便利な手法であることがわかりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top