[問題] 使用var的時機

作者: BigLoser (大魯蛇)   2014-08-17 21:52:27
各位先進大家好
今天在msdn上面看到一段
http://msdn.microsoft.com/zh-tw/library/ff926074.aspx
當指派右邊的變數型別很明顯,或是不需要精確的型別時,使用隱含型別的區域變數。
也就是說,如果我宣告一個string的變數
不應該寫成
string a = "123";
而是要寫成
var a = "123";
想請教一下為什麼要這樣?
THX
作者: iterator (rotareti)   2014-08-17 22:05:00
可參考 http://tinyurl.com/k3e88rq不過我個人不建議這樣寫, 如果該變數非用過即丟,保留完整的型別,在未來個人,或是團隊開發時,會比較清楚^^維護
作者: BigLoser (大魯蛇)   2014-08-17 22:10:00
謝謝樓上回覆
作者: shomingchang ( )   2014-08-17 22:11:00
用 linq 的時候
作者: YahooTaiwan (超可愛南西我老婆)   2014-08-17 22:55:00
超討厭人家寫 var,很難看
作者: m339606 (mize)   2014-08-17 23:50:00
當你懶的時候
作者: uranusjr (←這人是超級笨蛋)   2014-08-18 00:32:00
寫完整型別不會錯, var 的最佳用途應該是型別名很長可是變數生命期其實超短(例如在迴圈裡)寫一堆也沒意義時
作者: hoyunxian (WildDagger)   2014-08-18 10:09:00
我反而是喜歡用var多一點,因為多半時候VS會幫你判斷真的想不起來的時候滑鼠動一下就能看到型別了
作者: ssccg (23)   2014-08-18 12:43:00
LongClassName = new LongClassName() 的時候,寫var看起來差不多啊,這種時候寫完整型別很多餘
作者: liddle (Guderian)   2014-08-18 14:58:00
C#是強型別語言,所以你可以不用多花精神管變數的型別可以多花時間在表達自己的商業邏輯。當程式碼寫得像是英文文章。無論是在驗證邏輯或是日後維護,都有數不盡的好處。
作者: bbcust (bbcust)   2014-08-18 15:31:00
wcf和linq時會覺得var很好用
作者: YahooTaiwan (超可愛南西我老婆)   2014-08-18 21:27:00
VS 當然會幫你判斷,但是做為一個擁有速讀技能的程式開發者,var 無疑是讓閱讀時間從 logN 上升到 N^2就像在閱讀一篇沒有標點符號的文章,讀得懂,讀得慢型別名稱長,有 intellisense 幫忙,不成問題吧
作者: shomingchang ( )   2014-08-19 07:09:00
阿有些時候就是不知道型別啊 不用 var 要填啥?
作者: YahooTaiwan (超可愛南西我老婆)   2014-08-19 20:00:00
我還以為不知道型別時應該填 dynamic
作者: hoyunxian (WildDagger)   2014-08-20 11:12:00
但是dynamic的話執行時才會知道錯在哪,var的話編譯就會告訴你問題出在哪了
作者: ssccg (23)   2014-08-20 19:17:00
var是知道型別,只是寫出來沒好處的時候用的
作者: Litfal (Litfal)   2014-08-25 14:44:00
重點不是var, 而是var後面object的命名...才是好讀的關鍵有些人說寫成不要用var比較好讀, 但宣告才一行, 使用才是重點。好讀的code應該是看到function name和object name就大概知道它在做什麼才對。
作者: iterator (rotareti)   2014-08-25 16:08:00
變數名稱表示其用途,跟變數型別是兩回事...
作者: Litfal (Litfal)   2014-08-25 16:22:00
這樣說好了,宣告後要怎麼取得instance?1. new: class都寫在後面了,前面宣告還寫出來有什麼意義?2 工廠: 你不知道工廠建出來的東西是什麼? 那要不是工廠設計有問題, 就是連工廠是哪個工廠都搞不清楚了。3. 其他method return: 光看method name還不夠清楚?那要不是真的很容易混淆,就是method name取得不好。絕對會有容易混淆的部分,那寫明白當然是必須的。但這就好像註解一樣,每行都註解的code是好code?我不那麼認為。
作者: iterator (rotareti)   2014-08-25 16:36:00
函數名稱表示其用途,跟回傳型別一樣是兩回事...
作者: Litfal (Litfal)   2014-08-25 16:40:00
沒有人說他是同一回事,但很多情況下不影響你讀code。
作者: iterator (rotareti)   2014-08-25 16:43:00
既然知道不是同一件事情,就別扯著一起講..
作者: Litfal (Litfal)   2014-08-25 16:45:00
真奇怪了, 這有什麼不適合一起說的?你只是在排斥別人的想法而已。
作者: iterator (rotareti)   2014-08-25 16:50:00
嘿,我不是反對變數/函數名稱最好能適切表達其用途喔
作者: Litfal (Litfal)   2014-08-25 16:51:00
拿你轉的那一篇來說,裡面有var order=GetOrder(orderId);我覺得這樣一行就再清楚不過了。不需要特別去Order order=當然,若有好幾種Order(也就是容易混淆),明確寫出來當然
作者: iterator (rotareti)   2014-08-25 17:01:00
所以你的確知道變數名稱order跟函數名稱GetOrder的命名,和前面的 var 或 Order 或 OOXXOrder 或 KKVVOrder,對於可讀性來說, 是兩回事
作者: Litfal (Litfal)   2014-08-25 17:13:00
怎麼會是兩回事?例如var order = getOrder()最直覺就應該認知它是個Order type。若是違反這個直覺,那是應該寫明白
作者: iterator (rotareti)   2014-08-25 17:24:00
當專案規模夠大,保留完整型表,在未來個人維護,或是團隊開發時,會比較清楚變數名稱跟函數名稱是沒辦法完整解答"var"跟完整型別的表 => 別 typo
作者: YahooTaiwan (超可愛南西我老婆)   2014-08-25 18:45:00
Order order = getOrder(); 這樣世界不是很美好嗎??
作者: hoyunxian (WildDagger)   2014-08-26 16:48:00
其實另一個我喜歡打var的原因是少打一次物件名就少一次因為胖手指而出錯的可能性
作者: Ansaga (奈燦)   2014-08-27 17:36:00
大部份情況var是因為我懶(遮臉

Links booklink

Contact Us: admin [ a t ] ucptt.com