2012-01-06 12 views
0

このIF構造を簡素化するのに役立ちますか?これは、ノードが、プロプライエタリなもののようなjavascriptのであるので、db.executeのものを無視:)このIF構造の簡略化

if(!("Division" in Shipping)) 
    { 
     var shipError = false; 
     Shipping.Division = Billing.Division; 
     if(!Shipping.Division) 
     { 
       if(Shipping.PostalCode) 
      { 
       Shipping.Division = Db.ExecuteScalar("SELECT Code from Location.Division D JOIN Location.PostalCode P ON DivisionId = D.ID AND PostalCode=?", Shipping.PostalCode); 
       if(!Shipping.Division) shipError = true; 
      } 
      else 
       shipError = true; 
     } 

     if(shipError){ 
       Errors.push({Code : "SHIPPINGDIVISION", Message : "Shipping State Required"}); 
       Shipping.Division = ""; 
     } 
    } 
+0

は、なぜあなたはそれを簡素化したいですか?うまく動作しないのですか、または不明瞭なバグ、パフォーマンスの問題がありますか? –

+0

簡単な方法はありません。 – Acn

+0

@ビッグ私はユーモアに感謝します。 – deceze

答えて

0

Googleの閉鎖を試しましたか?

それはjavascriptのオプティマイザです。コード内で使用できる最適化が欲しい場合は、コードを最適化する方法を試してみてください。ページから

JavaScriptオプティマイザ クロージャコンパイラは、JavaScriptをコンパクトで高性能なコードにコンパイルします。コンパイラはデッドコードを取り除き、残っているものを書き換えて最小限に抑え、ダウンロードと実行を迅速に行います。また、シンタックス、変数参照、およびタイプをチェックし、一般的なJavaScriptの落とし穴について警告します。これらのチェックと最適化は、バグが少なく、保守が簡単なアプリを作成するのに役立ちます。人間が読めるソースをデバッグするのと同じくらい簡単に難読化されたコードのデバッグを可能にするFirebugの拡張機能であるClosure Inspectorでコンパイラを使用することができます。

リンクGoogle Closure

あなたのコードが最適化されました。

if(!("Division" in Shipping)) { 
    var shipError = !1; 
    Shipping.Division = Billing.Division; 
    if(!Shipping.Division) { 
    Shipping.PostalCode ? (Shipping.Division = Db.ExecuteScalar("SELECT Code from Location.Division D JOIN Location.PostalCode P ON DivisionId = D.ID AND PostalCode=?", Shipping.PostalCode), Shipping.Division || (shipError = !0)) : shipError = !0 
    } 
    if(shipError) { 
    Errors.push({Code:"SHIPPINGDIVISION", Message:"Shipping State Required"}),  Shipping.Division = "" 
    } 
} 
; 
+0

自動的に最適化されたコードが得られるほど良いとは思わないでください。 @decezeと私の回答はどちらも短く、 'shipError'変数を完全になくし、両方とも読みやすく、保守性が向上しています。問題は「単純化する」ことであったが、Google Closureバージョンの途中で、Shipping.PostalCode?を開始する行はちょっとばかげている。 _right_にしません。 – nnnnnn

3
if (!Shipping.Division) { 
    Shipping.Division = Billing.Division; 
} 
if (!Shipping.Division && Shipping.PostalCode) { 
    Shipping.Division = Db.ExecuteScalar(...); 
} 
if (!Shipping.Division) { 
    Errors.push({Code : "SHIPPINGDIVISION", Message : "Shipping State Required"}); 
} 

としてこれを読む:分裂を出荷しませ

  • が分裂を出荷取るしようとした場合

    • 課金部門から
  • 部門が、郵便番号を出荷していない場合
    • はあなたがちょうどテストすることができ、shipError変数を必要としない
+0

これはいいですが、 'Shipping.Division'も' Billing.Division'に設定する必要があります。 –

+0

'{...}'より正確に独自のアルゴリズムを反映することになる(!Shipping.Division &&!(Shipping.Division = Billing.Division)&& Shipping.PostalCode)であれば... – nnnnnn

+0

@Tikhon私はここに例を与えています生産コードを書くのではなく、 – deceze

2

に失敗し、まだ分裂

  • を出荷していない場合は郵便番号から
  • を分裂を出荷取得しようif(!Shipping.Division)最後にもう一度。これは、変数の宣言(明らか)を除去するだけでなく、shipError = trueを設定するだけであったifelseを削除することができます。このようになります:

    if(!("Division" in Shipping)) { 
        Shipping.Division = Billing.Division; 
        if(!Shipping.Division) { 
         if(Shipping.PostalCode) { 
         Shipping.Division = Db.ExecuteScalar("SELECT statement here", 
                   Shipping.PostalCode); 
         }  
        } 
        if(!Shipping.Division){ 
         Errors.push({Code : "SHIPPINGDIVISION", Message : "Shipping State Required"}); 
         Shipping.Division = ""; 
        } 
    }