甚麼? var?
我非常討厭var!
尤其是不能肉眼從右側直接推斷左側型別的時候!
使用var,到底是好還是壞?
1. 程式可讀性
我曾看過一本書,不過我已經忘記書名,
慘了老了...。
書中有提點到,盡量不要使用 var,我讀完之後,我寫的Code從此之後,再也沒寫過var了!
舉幾個例子好了!
var value1 = "HelloWorld";
var value2 = 27M;
var value3 = 7;
var value4 = new MyType();
好,從上述的例子可以看出,value1為 String型態,value2為Decimal型態,value3為Int32型態,value4為MyType型態,到目前為止,人類的肉眼還是可以很快速地辨別出型態!
但是但是...,問題來囉!
問題一
var result = SomeObject.DoSomeWork();
有人可以告訴我上面會回傳的值會是甚麼型別嗎?
應該沒有人可以回答我吧?
都要應該要跳入該方法,查看原始碼才會知道!
問題二
var result = GetMagicNumber();
var total = 100 * f / 6;
請問total會是多少呢?
假設result回傳值為1,那麼total的值就會是16。
那我們在悲觀一點看待上訴的Code,如果GetMagicNumber方法,是一個大家共用的底層呢?
今天有位開發者修改了此方法,將回傳值的型態修改為Decimal呢?
total的值會是16.666666666666666666666666667,但是更慘的問題來了,修改完畢後,重新編譯,因為是var,所以編譯時不會引發任何錯誤,可以順利編譯成功,此時你交付編譯後的程式碼給客戶使用,嘿嘿嘿...,準備接客訴電話吧!
2. 效率問題
問題一
Int32 i = 1;
var i = 1;
請問執行速度較快?
我猜大家都會選擇Int32對吧?
答案並非如此...,var i = 1;的執行速度較快!What? 滿滿黑人問號!
有興趣的人可以點此
連結,下方有附贈原始碼提供測試!
欸?科技日新月異,看到這邊都想放棄人生了!
如果用.Net Core 跑出來的結果更噁心,var的耗時會是Int32的一半!
問題二
此程式有著嚴重的效能問題!
q.Where,沒有呼叫Queryable.Where,而是呼叫Enumerable.Where,詳情大家可以自己Google看看!
應該將程式碼修改成下面那樣!
此時 q 的型態為IQueryable<String>,Where句子會保存更新的更完整的表達示樹!
總結
「偏好」使用而非「總是」使用!
看完這個章節後,我還是覺得盡量少寫var,而非永遠不使用var!
畢竟現在電腦的速度越來越快,幾毫秒、幾奈秒的運算時間,為了方便維護程式碼,還是多打幾個字讓後人能快速閱讀程式碼,較為實在,這是我的論點,若有問題歡迎底下留言討論囉! ^__^
講了這麼多!
var到底用還是不用呢?
留言
張貼留言