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