前言:
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行了,哪種代碼更容易看不用多說。
- 待續。。。。
哎~! 本來我總結了很多的,只是前段時間太忙,一直沒時間寫, 現在剛從上家公司辭職,還要過幾天才去新公司報道,才有時間寫點東西,結果居然一時想不起來了,只記得這兩點了,以后再補充。
也歡迎大家把自己的總結貼一下。