1. ホーム
  2. exception

[解決済み] 例外を発生させるタイミングは?

2022-03-20 09:44:13

質問

私のアプリケーションが想定していない条件ごとに例外が作成されています。 UserNameNotValidException , PasswordNotCorrectException などです。

しかし、それらの条件に対して例外を作るべきではないと言われました。私のUMLでは、それらはメインフローに対する例外であり、なぜ例外であってはならないのでしょうか?

例外を作成するためのガイダンスやベストプラクティスがあれば教えてください。

どのように解決するのですか?

私の個人的な指針は、現在のコードブロックの基本的な前提が誤りであることが判明した場合に例外がスローされることです。

例1:任意のクラスを調べ、そのクラスがList<>を継承していれば真を返すとされる関数があるとする。この関数は、「このオブジェクトはListの子孫ですか?

例2:List<>を調べて、長さが50以上なら真を、それ以下なら偽を返す別の関数があるとします。この関数は、「このリストは50個以上のアイテムを持っているか」という質問をします。もし私がNULLを渡したら、その仮定は偽りになります。その場合、もし関数が どちらか または を false にした場合、それ自身のルールを破ることになります。この関数は 何でも で、その質問に正しく答えたと主張します。そのため、例外を投げます。

これは "ロードされた質問" 論理的誤謬。すべての関数は問いを投げかけます。もし与えられた入力がその問いを誤りにしているならば、例外を投げます。この線引きはvoidを返す関数では難しいのですが、要するに、入力に対する関数の仮定が破られた場合、普通に返すのではなく、例外を投げるべきだということです。

この方程式の反対側は、もし関数が頻繁に例外をスローするようであれば、おそらくその仮定を改良する必要があるということです。