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

前言:spa

  if,相信是童鞋們使用的最頻繁的關鍵字了,並且不少時候,咱們使用的if都是在無心識的狀態下隨手而爲。鍵入if,兩下回車(我使用了resharper,能夠自動編排if的格式),再信手寫下咱們須要的邏輯,一段能夠「正常運行」的代碼就被咱們實現了。儘管這段邏輯比較複雜,但在那個時間段,咱們對這段業務的先後流程已經有了很長時間的思考,因此能夠比較輕鬆的寫出來。但問題來了,一段時間以後,咱們發現這裏須要修正下,更或者是爲了提升魯棒性,須要爲某個變量考慮更多的狀況——即進一步添加更多的if。而後,看着那大段大段的if else,咱們蛋疼之餘,也會小小的欽佩,當時我是怎麼寫出這麼牛逼的代碼的?code

 

  • dictionary代替選擇類if語句

if自己沒有選擇的功能,爲了實現這點,有的人是這樣寫的:blog

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

else if 。。。io

或者class

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[]的方式,這樣無疑代碼會美觀不少。d3

 

  • 避免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行了,哪一種代碼更容易看不用多說。

  • 待續。。。。

  哎~! 原本我總結了不少的,只是前段時間太忙,一直沒時間寫, 如今剛從上家公司辭職,還要過幾天才去新公司報道,纔有時間寫點東西,結果竟然一時想不起來了,只記得這兩點了,之後再補充。

也歡迎你們把本身的總結貼一下。

相關文章
相關標籤/搜索