はいくつかの方法がありますけれども、コードは次の構造を使用してビットをクリーンアップすることができ、最も単純には単にいくつかの機能と抽象うち異なる層をバストすることだと思いますあなた自身が深く行く見つけた場合。)
if (/* Condition */) {
value = aFunctionSaysWhat();
} else {
// value = Error 1
}
....
value aFunctionSaysWhat(){
if (/* Condition */) {
return aSecondFunctionHere();
} else {
// return Error 2
}
}
基本的な前提は、関数が可能な場合は、抽象化の一つの層の上に住んでおり、一つのことを行うべきであるということです。
次の可能性は、すべてを平坦化することです。これは、最初のネストされたメソッドよりも優れていますが、基本的には同様の複雑さがあります。いくつかのオプションしかなく、さらに追加する予定がない場合は、機能的なアプローチよりはるかにクリーンかもしれません。
if(ErrorCondition1){
//Error 1
}else if(ErrorCondition2){
//Error 2
}else if(ErrorCondition3){
//Error 3
}else{
//Superb
}
最後に、あなたはハッシュを保存したり、必要な答えをマッピングし、完全にあれば削除することができ、これはあなたの能力に依存して実装する能力は、いくつかの結果をハッシュします
Results = {'Result1':'Error1', 'Result2':'Error2', 'Result3':'Error3', 'Success':'Superb'}
return Results[ConditionHash(Condition)];
くそー、あなたの忍者! 47秒? :-( – Dragontamer5788
+1:最初に "else"部分をチェックするために条件を反転させることで、 "矢頭"の入れ子条件を回避するのが良い習慣です。エラーチェックの線形ストリームは、ネストされたものよりも読みやすく、成功チェックのストリーム – David
@David:Nod。私の大学のCS教授の一人は、「戻り」のようなものを憎んでいました。実際に入れ子にされた条件文のばかげたレベルをどのように読むのが好きであることを実際に知った – cdhowie