提高代碼質量系列之二:重構小技巧——if篇


前言:

  if,相信是童鞋們使用的最頻繁的關鍵字了,而且很多時候,我們使用的if都是在無意識的狀態下隨手而為。鍵入if,兩下回車(我使用了resharper,可以自動編排if的格式),再信手寫下我們需要的邏輯,一段可以“正常運行”的代碼就被我們實現了。盡管這段邏輯比較復雜,但在那個時間段,我們對這段業務的前后流程已經有了很長時間的思考,所以可以比較輕松的寫出來。但問題來了,一段時間之后,我們發現這里需要修正下,更或者是為了提高魯棒性,需要為某個變量考慮更多的情況——即進一步添加更多的if。然后,看着那大段大段的if else,我們蛋疼之余,也會小小的欽佩,當時我是怎么寫出這么牛逼的代碼的?

 

  • dictionary代替選擇類if語句

if本身沒有選擇的功能,為了實現這點,有的人是這樣寫的:

if (orderinfo.State == 1)
{
result = "已預定";
}
else if (orderinfo.State == 2)
{
result = "已售出";
}

else if 。。。

或者

result = orderInfo.State == 0 ? "待確認" : orderInfo.State == 1 ? "執行中" : orderInfo.State == 2 ? "已完成" : orderInfo.State == 3 ? "已解除" : "";

既瑣碎,可讀性也不高,而且效率還低(當然,這種情況數據量一般不大)

如果用dictionary,

      public Dictionary<int, string> OrderStatedDictionary = new Dictionary<int, string>()
        {
            {0, ""},
            {1, "已預訂"},
            {2, "已售出"},
            {3, "待確認"},
        };

調用的時候,用OrderStatedDictionary[]的方式,這樣無疑代碼會美觀很多。

 

  • 避免if的多層嵌套

兩段代碼比較

 public string GetNowState(int p1, int p2 , int p3)
        {
            if (CheckMethod1(p1))
            {
                if (CheckMethod2(p2))
                {
                    if (CheckMethod3(p3)))
                    {
                        return GetResult1();
                    }
                }
            }
            return "";
        }

 

        public string GetNowState(int p1, int p2, int p3)
        {
            if (!CheckMethod1(p1))
            {
                return "";
            }
            if (!CheckMethod2(p2))
            {
                return "";
            }
            if (CheckMethod3(p3)) )
            {
                return GetResult1();
            }
            return "";
        }
    }

前者有三層的if嵌套,而后者的邏輯着完全是一條線串下來,代碼量少無所謂,但一旦行數超過50行了,哪種代碼更容易看不用多說。

  • 待續。。。。

  哎~! 本來我總結了很多的,只是前段時間太忙,一直沒時間寫, 現在剛從上家公司辭職,還要過幾天才去新公司報道,才有時間寫點東西,結果居然一時想不起來了,只記得這兩點了,以后再補充。

也歡迎大家把自己的總結貼一下。


免責聲明!

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



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