boolean
タイプを返すメソッドがあります:
boolean activate() {
try {
} catch(IOException e){
} catch (FileNotFoundException e){
}
}
例外がある場合は、戻る必要があるfalse
かどうかを知りたいです。true
boolean
タイプを返すメソッドがあります:
boolean activate() {
try {
} catch(IOException e){
} catch (FileNotFoundException e){
}
}
例外がある場合は、戻る必要があるfalse
かどうかを知りたいです。true
あなたは置くことができません:
boolean activate() {
try {
// Do Something risky...
return true;
} catch(IOException e){
return false;
}
catch (FileNotFoundException e){
return false;
}
}
失敗したときにどのアクティブ化が返されるかを知っているのはあなただけです。
わからない場合は、メソッドから例外をスローし、代わりに呼び出し元に対処させることをお勧めします。
本番コードで何らかの方法でエラーを消費することを確認する必要がありますが、基本的なバージョンは次のとおりです。
boolean activate() {
try {
} catch(Exception e){
return false;
}
return true;
}
これは設計の問題です(したがって、閉鎖される可能性があります)が、非常に重要なポイントである契約を示しています。あなたの職務の契約は何ですか?
/** This function will activate <a thing> and report success or failure to do so.
* @return true if <thing> is activated, false otherwise.
*/ //THIS CONTRACT IS SUPER IMPORTANT WHEN THINKING ABOUT CODING
boolean activate() {
try {
//Some code
return true;
} catch(IOException e){
Log.error("When attempting to activate <thing> an IOException was thrown.");
return false;//It wasn't activated! There was an IO exception, therefore follow the contract.
} catch (FileNotFoundException e){
Log.error("When attempting to activate <thing> a FileNotFoundException was thrown.");
return false;//It wasn't activated! There was a different exception, therefore follow the contract.
}
}
ただし、ロギングの存在に注意してください。何でこれが大切ですか?あなたのコードは大音量で耐久性があるはずだからです。この場合; 契約上正しい応答(true / false)を返すため、それを呼び出すコードは、それが成功したかどうかを認識し、厄介な例外処理やプログラム全体の正常なクラッシュなしに適切に動作できます。これは、耐久性のあるコードであることを意味します。ただし、ログを記録すると大音量になる可能性があります。つまり、アプリの状態を監視している場合は、問題があることがすぐにわかり、正確にはその問題がどこにあるかがわかります。そして、あなたはそれを修正することができます。
契約。耐久性。可視性。