if/else的優化方法


if/else的優化方法

  1if/else 語句塊的順序

    首先處理正邏輯而不是負邏輯

    先處理簡單的情況

    先處理有趣的或者是可疑的情況

 

  2)通過提早返回減少嵌套

 

  3)總結變量

    用一個短很多的名字來代替一大塊代碼,這就是總結變量。

    使用德摩根定理,分解復制的判斷邏輯

    拆分巨大的語句,讓語句更容易快速閱讀

 

 

 

  4)分析函數(或代碼塊)畫出邏輯樹

    邏輯樹是整合1)和2)兩個部分,為了理清復雜if語句邏輯二產生的。

    邏輯樹的結構與哈夫曼樹類似

 

    邏輯樹規則:(模塊的定義:每一個if/else的分支即為一個模塊)

      1.每個模塊都是一個根結點,每一個根結點都會結束函數運行。

      2.同等級的模塊(即if語句的正反兩面),無子模塊的模塊(內部無if語句)優先級高於擁有子模塊的模塊(內部嵌套if語句)

      3.同等級和同條件(兩個模塊都擁有子模塊或者都沒有子模塊)的情況下,使用率高的模塊優先級高於使用率低的

      4.若模塊中包含子模塊,子模塊的優先級高於父模塊。

 

     如下程序

 

if(user_result == SUCCESS ){

  if( permission_result != SUCCESS){

    reply.WriteErrors("error reading permissions");     reply.Done();     return;   }   reply.WriteErrors("");

}else{

  reply.WriteErrors(user_result);

}

reply.Done();
return;

 

 

     可將程序分為綠、紅、紫三模塊,藍色是前置條件,黑色是共有部分。

   根據上述規則

    1.根據規則2,紫、紅兩個屬於同等級模塊,但是由於紅色模塊中包含一個子模塊,所以紅色模塊優先級低於紫色模塊

    2.根據規則4,綠色模塊屬於紅色模塊子模塊,所以綠色模塊優先級高於紅色模塊

    3.根據1,2,函數的優先級排列由高到低為:紫色>綠色>紅色

   

   結果為:

 

if(user_result != SUCCESS){

  reply.WriteErrors(user_result);

  reply.Done();

  return;

}

 
if(permission_result != SUCCESS){

  reply.WriteErrors(permission_result);

  reply.Done();

  return; }


reply.WriteErrors("");

reply.Done();
return;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM