2017-07-13 4 views
5

return文を使用して最小化/避ける必要があり、私はかなり広範囲にこのパターンを見ていると、彼らができるだけreturn文を避けるためにしようとしているようです。コード内のいくつかの場所でさえ、これはほとんど極端に取られます。たちは、私が働いている現在のソフトウェアでのJavaScriptのフロー制御で

文が最小化または回避が、私は思考のこのラインの正確な理由や起源を覚えている(または約検索)することはできませんする必要があります戻る私は何とか昔聞いた

。私はいくつかのPLでパフォーマンスが何らかの影響を受けていると考えています。

私は個人的にこのコードを読めるわけではありませんが、疑問の恩恵を与えているので、私はこのパターンを使用するかどうかは性能面でjavascriptのメリットがあるのか​​不思議です。私は決定した場合

if (err) { 
    if (err.message) { 
     message = err.message; 
    } else { 
     if (err.errorCode) { 
      message = err.errorCode; 
     } else { 
      message = "Unknown error"; 
     } 
    } 
} else { 
    message = "Unknown error."; 
} 
deferred.reject(message); 

、私は何気なく、このようにシーケンスを終了するには、returnステートメントを使用したい:

if(!err || (!err.message && !err.errorCode)){ 
    deferred.reject("Unknown error."); 
    return; 
} 

if(err.message){ 
    deferred.reject(err.message); 
    return; 
} 

if(err.errorCode){ 
    deferred.reject(err.errorCode); 
} 

が二人以上の第一のパターンでの利点はありますか?

+1

関数は1つのことだけを実行する必要があります。 'if'条件は通常、関数が複数のことをしていることを意味します。 –

+0

多くのリターンを使用する際の問題は、その時点で関数がその時点で残っていることです。おそらくあなたはクリーンアップコードを持っているかもしれません。おそらくオブジェクトを解放しなければならないかもしれません。多分もっと多くのものをチェックしなければならないかもしれません。 –

+0

)あなたが素敵である、SOに別の答えへのリンクを提供してきましたが、それは 'JS')で@Andrey)および例えば、jsの中であなたがコールバックを呼び出すたびに返す必要が... –

答えて

2

あなたのコード例では、また、ニックネーム持っている - クリスマスツリーを、そして実際のプロジェクトでは、それがサポートようなコードは非常に困難です。例えば
あなたは別の条件を追加する必要があります - あなたは、既存の内部で別のifのブロックを置くなどなど、それはよ...悪夢のようであり、結果として、あなたはawfullツリーを持っています...

、あなたはこのような何かできる代替手段として

を:

if (err) { 
    if (err.message) { 
     return err.message; 
    } 
    if (err.errorCode) { 
     return err.errorCode; 
    } 
} 
return "Unknown error."; 

このようなコードは単純に見えますが、そうではありませんか?
だから私は本当にそれがこのような目的のためにセンスの使用returnを作ると信じています。

しかし、ここでの主なポイントは - 一貫性を緩めてはいけないと思います!

if (err) { 
    if (err.message) { 
     return err; 
    } 
    // Here some stuff... 
    // Few lines of code... 
    // 
    return -1; 
} 
// Another code... 
// 
if (!user) { 
    return null; 
} 
// And somewhere in the end on anothere scrollin screen 
//  
return user.email; 

この例では、objectnumberまたはnullまたはstringを返します - そして、それは別の悪夢です:私たちの例では、我々は常にと同じビジネスロジックで、例えば同じデータ型で結果を返します...
大きな機能の実際のプロジェクトでは、多くのリターンのためにこのようなコードを取得するのは本当に簡単です...
サポートを簡単にすることができるので、ここでも良い結果が得られます...

関連する問題