を利用して参りたいと考えておりまくことができるようになりの'else'JavaScript

StackOverflow https://stackoverflow.com/questions/1820839

質問

私はプロジェクトに取り組んでいるかの複雑なJavaScriptの処となります。この入れ子 if-elsesである。していることが定められていますが、そのケア市場に出す前に指令に適合JavaScriptコードとしてシステムにおける相分離による読書、その他のヒントにスタックオーバーフローが、私の場合、下記の二つを構築しまうに違いの速度だけでは

if(some_condition) {
    // process
    return ;
}

// Continue the else condition here

vs

if(some_condition) {
    // Process
}

else {
   // The 'else' condition...
}
役に立ちましたか?

解決

常に最初の方法を使用します。読みやすく、インデントが少なくなります。実行速度に関する限り、これは実装に依存しますが、私はそれらが両方とも同一であることを期待します。

他のヒント

多くの言語では、反転 if ネストを減らすためのステートメントまたは前提条件を使用します。

また、コードのネストが少ないと、コードの可読性と保守性が向上します。

"プロフィール、推測しないでください!"

  1. あなたは馬の前にカートを置いています(人間による維持可能性は機械の速度に勝ります)
  2. 測定によって最適化の努力を促す必要があります。つまり、

    • 自分で実行時間を計るべきです。ブラウザやバージョンによって明らかに異なります
    • アプリケーションのホットスポットの速度のみを最適化する必要があります(ポイント1を参照)

パフォーマンスに違いはありません。保守性のために2番目の例をお勧めします。一般に、ルーチンの出口ポイントは1つだけにすることをお勧めします。デバッグと理解に役立ちます。

無効な状況を除外するときは、最初のアプローチを使用します。

たとえばいくつかの検証を行うときに最初のアプローチを使用し、検証のいずれかが失敗した場合に戻ります。前提条件のいずれかが失敗した場合、先に進むことは意味がありません。同じことは、Martin fowlerのリファクタリングの本で言及されています。彼はそれを「条件をガード句に置き換える」と呼んでいます。そして、コードを本当に理解しやすくすることができます。

これはJavaの例です。

  public void debitAccount(Account account, BigDecimal amount) {
    if(account.user == getCurrentUser()) {
      if(account.balance > amount) {
           account.balance = account.balance - amount
       } else {
          //return or throw exception
       }
    } else {
        //return or throw exception
    }
  }

VS

 public void debitAccount(Account account, BigDecimal amount) {
    if(account.user != getCurrentUser()) return //or error
    if(account.balance < amount) return //or error
    account.balance = account.balance - amount    
}

おそらく少しですが、関数の残りの部分に「重い」部分が含まれていない限り、測定できるとは思いません。 (それ以外の場合は、戻り値が同じ結果になると想定しているため冗長です)js呼び出し。

補足として、これは不必要なマイクロ最適化であり、おそらくパフォーマンスの改善のために他の場所を探す必要があります。つまり、Chromeの開発者ツールまたはFirefoxのFirebug(または同様のツール)でスクリプトをプロファイルし、低速/長時間実行を探す必要があります呼び出し/関数。

実行中のブラウザーのJavaScript実装に依存しますが、それらの間に顕著な違いはありません(速度の点で)。

2番目の形式は、フローを中断することはプログラミングの適切な習慣ではないため、望ましい方法です。また、アセンブリでは、評価に関係なく、ジャンプ命令(マイクロ操作)が常に評価されることを考慮してください。

自分でテストします。このJavaScriptがブラウザーで実行されている場合、ほぼ確実にブラウザーのJavaScript解析エンジンに依存します。

if条件で分岐するため、違いは生じないでしょう。そのため、some_conditionがtrueの場合、else部分は、戻り値がなくても変更されません。

return が1ミリ秒かかるのに対し、ネストされた if は0.1ミリ秒かかる(またはその逆)と仮定します。

どちらかがこれほど遅いと想像するのは難しいです。

今、あなたは毎秒100回以上やっていますか?

もしそうなら、多分気をつけるべきです。

がある場合のみシングル if..else の性能はほぼ同じ ではどちらでも構いません。いは読みやです。がら入れ子の諸表を使用 return最performantif...elsecase switch

私の経験から言えば、それはあなたがチェックしている状態に依存します。

  1. if .. return は、以下のコード全体をまったく実行する必要のないブール条件(おそらく設定)をチェックすると読みやすく、読みやすくなります。

  2. if .. else は、ある値が2つ(またはそれ以上)の可能な値のいずれかであり、両方のケースで異なるコードを実行する場合に読みやすくなります。 2つの可能な値の意味は、解釈可能な値が等しい条件を表しているため、同じ論理レベルで記述する必要があります。

私の意見では、returnとelseは上記の場合と同じですが、一般に if-else if()return; は大きく異なります。現在のスコープから親スコープに移動するときにreturnステートメントを使用できますが、 if-else の場合は、同じスコープでさらにif-elseを確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top