条件付きリターンステートメントを使用すると、最初はきれいで美しく見えるかもしれませんが、リファクタリング時に問題が発生する可能性があります。
if my conditions are met, execute the next statement.
しかし、あなたが言っていることは次のとおりです。:
何が言いたいのはこれです
if my conditions are not met, get out of here.
1あなたは、複雑な方法であるとしましょう例# 2つまたは3つの入れ子式if文:
もちろん210
例#2
、同じ方法は、条件付きのreturn文を使用して、より良いになります
function myComplexMethod (param1 : int, param2: int, param3:String) : String {
if (!param3) return null;
var ret : String = null;
ret += param3;
if (param2 == 0) return ret;
ret += param2;
if (param1 == 0) return ret;
ret += param1 + param2;
return ret;
}
しかし、一見、あなたは本当に、このメソッドの出力が何であるかを伝えることができますになるだろう?
例#3
あなたが本当にあなたのコードをクリーンアップするつもりだった場合はどう?あなたは、各ブロックの意図を反映するために、コードをリファクタリングした場合は、複雑な方法は、簡単な方法になるだろう。この最後の例では
function mySimpleMethod (param1 : int, param2: int, param3:String) : String {
return param3 != null ?
outputOfAllParams (param1, param2, param3) : null;
}
function outputOfAllParams (param1 : int, param2: int, param3:String) : String {
return param2 != 0 ?
param3 + combinedOutputOfIntParams (param1, param2) : param3;
}
function combinedOutputOfIntParams (param1 : int, param2: int) : String {
return param1 != 0 ?
param2 + "" + sumOfIntParams(param1, param2) : "" + param2;
}
function sumOfIntParams(param1 : int, param2: int) : int {
return param1 + param2;
}
、コードが読みやすいです、そしてあなたはそれを行うことになっているかを見ることができますちょうどそれを見て。
事実:リファクタリングを使用して、例#1から例#3に簡単に移行できます。条件付きブロックのそれぞれが新しいメソッドにリファクタリングされることは明らかです。条件付きのリターンステートメントでは、直感的ではありません。希望のコードブロックがどこで終わるか、そしていつ返ってくるか、非常に慎重にチェックする必要があります。
もちろん、このような単純なタスクを扱う場合、そのメリットはあまり明らかではありませんが、実際の生産コードがあれば、インテントを可能な限り明確にしたいと思います。数ヶ月であなた自身のコードに戻りますが、例#2を使用した場合は、それが何をするべきかを理解するのにずっと時間がかかります。
関数が値を返す場合は、次のようにします。return null;それ以外はちょうど言う:復帰; –