[问题] 使用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