作者BigLoser (大鲁蛇)
看板C_Sharp
标题[问题] 使用var的时机
时间Sun Aug 17 21:52:27 2014
各位先进大家好
今天在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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1408283550.A.153.html
2F:→ iterator: 不过我个人不建议这样写, 如果该变数非用过即丢, 08/17 22:07
3F:→ iterator: 保留完整的型别,在未来个人,或是团队开发时,会比较清楚 08/17 22:08
4F:→ iterator: ^^维护 08/17 22:09
5F:→ BigLoser: 谢谢楼上回覆 08/17 22:10
6F:推 shomingchang: 用 linq 的时候 08/17 22:11
7F:推 YahooTaiwan: 超讨厌人家写 var,很难看 08/17 22:55
8F:→ m339606: 当你懒的时候 08/17 23:50
9F:→ uranusjr: 写完整型别不会错, var 的最佳用途应该是型别名很长可是 08/18 00:32
10F:→ uranusjr: 变数生命期其实超短(例如在回圈里)写一堆也没意义时 08/18 00:33
11F:推 hoyunxian: 我反而是喜欢用var多一点,因为多半时候VS会帮你判断 08/18 10:09
12F:→ hoyunxian: 真的想不起来的时候滑鼠动一下就能看到型别了 08/18 10:10
13F:→ ssccg: LongClassName = new LongClassName() 的时候,写var看起来 08/18 12:43
14F:→ ssccg: 差不多啊,这种时候写完整型别很多余 08/18 12:44
15F:推 liddle: C#是强型别语言,所以你可以不用多花精神管变数的型别 08/18 14:58
16F:→ liddle: 可以多花时间在表达自己的商业逻辑。当程式码写得像是英文 08/18 14:59
17F:→ liddle: 文章。无论是在验证逻辑或是日後维护,都有数不尽的好处。 08/18 15:00
18F:→ bbcust: wcf和linq时会觉得var很好用 08/18 15:31
19F:推 YahooTaiwan: VS 当然会帮你判断,但是做为一个拥有速读技能的程式 08/18 21:27
20F:→ YahooTaiwan: 开发者,var 无疑是让阅读时间从 logN 上升到 N^2 08/18 21:28
21F:推 YahooTaiwan: 就像在阅读一篇没有标点符号的文章,读得懂,读得慢 08/18 21:30
22F:推 YahooTaiwan: 型别名称长,有 intellisense 帮忙,不成问题吧 08/18 21:40
23F:→ shomingchang: 阿有些时候就是不知道型别啊 不用 var 要填啥? 08/19 07:09
先谢谢大家的回应,不过我指的是,很清楚型别要用var,经由上面一些版有
的回应我也可以了解是为什麽了
※ 编辑: BigLoser (60.249.104.106), 08/19/2014 08:19:46
24F:推 YahooTaiwan: 我还以为不知道型别时应该填 dynamic 08/19 20:00
25F:推 hoyunxian: 但是dynamic的话执行时才会知道错在哪,var的话编译就 08/20 11:12
26F:→ hoyunxian: 会告诉你问题出在哪了 08/20 11:12
27F:→ ssccg: var是知道型别,只是写出来没好处的时候用的 08/20 19:17
28F:→ Litfal: 重点不是var, 而是var後面object的命名...才是好读的关键 08/25 14:44
29F:→ Litfal: 有些人说写成不要用var比较好读, 但宣告才一行, 使用才是 08/25 14:46
30F:→ Litfal: 重点。好读的code应该是看到function name和object name就 08/25 14:48
31F:→ Litfal: 大概知道它在做什麽才对。 08/25 14:48
32F:→ iterator: 变数名称表示其用途,跟变数型别是两回事... 08/25 16:08
33F:→ Litfal: 这样说好了,宣告後要怎麽取得instance? 08/25 16:22
34F:→ Litfal: 1. new: class都写在後面了,前面宣告还写出来有什麽意义? 08/25 16:23
35F:→ Litfal: 2 工厂: 你不知道工厂建出来的东西是什麽? 那要不是工厂设 08/25 16:24
36F:→ Litfal: 计有问题, 就是连工厂是哪个工厂都搞不清楚了。 08/25 16:24
37F:→ Litfal: 3. 其他method return: 光看method name还不够清楚?那要 08/25 16:26
38F:→ Litfal: 不是真的很容易混淆,就是method name取得不好。 08/25 16:26
39F:→ Litfal: 绝对会有容易混淆的部分,那写明白当然是必须的。但这就好 08/25 16:29
40F:→ Litfal: 像注解一样,每行都注解的code是好code?我不那麽认为。 08/25 16:29
41F:→ iterator: 函数名称表示其用途,跟回传型别一样是两回事... 08/25 16:36
42F:→ Litfal: 没有人说他是同一回事,但很多情况下不影响你读code。 08/25 16:40
43F:→ iterator: 既然知道不是同一件事情,就别扯着一起讲.. 08/25 16:43
44F:→ Litfal: 真奇怪了, 这有什麽不适合一起说的?你只是在排斥别人的想 08/25 16:45
45F:→ Litfal: 法而已。 08/25 16:45
46F:→ iterator: 嘿,我不是反对变数/函数名称最好能适切表达其用途喔 08/25 16:50
47F:→ Litfal: 拿你转的那一篇来说,里面有var order=GetOrder(orderId); 08/25 16:51
48F:→ Litfal: 我觉得这样一行就再清楚不过了。不需要特别去Order order= 08/25 16:52
49F:→ Litfal: 当然,若有好几种Order(也就是容易混淆),明确写出来当然 08/25 16:53
50F:→ iterator: 所以你的确知道变数名称order跟函数名称GetOrder的命名, 08/25 17:01
51F:→ iterator: 和前面的 var 或 Order 或 OOXXOrder 或 KKVVOrder, 08/25 17:02
52F:→ iterator: 对於可读性来说, 是两回事 08/25 17:03
53F:→ Litfal: 怎麽会是两回事?例如var order = getOrder()最直觉就应该 08/25 17:13
54F:→ Litfal: 认知它是个Order type。若是违反这个直觉,那是应该写明白 08/25 17:15
55F:→ iterator: 当专案规模够大,保留完整型表,在未来个人维护, 08/25 17:24
56F:→ iterator: 或是团队开发时,会比较清楚 08/25 17:25
57F:→ iterator: 变数名称跟函数名称是没办法完整解答"var"跟完整型别的 08/25 17:26
58F:→ iterator: 表 => 别 typo 08/25 17:27
59F:推 YahooTaiwan: Order order = getOrder(); 这样世界不是很美好吗?? 08/25 18:45
60F:推 hoyunxian: 其实另一个我喜欢打var的原因是少打一次物件名就少一次 08/26 16:48
61F:→ hoyunxian: 因为胖手指而出错的可能性 08/26 16:48
62F:推 Ansaga: 大部份情况var是因为我懒(遮脸 08/27 17:36