Use 'var' or not
*Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.*
前言
关于'var':
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型 var。隐式类型的本地变量是强类型变量(就好像您已经声明该类型一样),但由编译器确定类型。(摘自msdn)
简单来说,var类型有以下几个特点:
- var可代替任何类型
- 编译器会根据上下文来判断你到底是想用什么类型的
那么在实际编程过程中到底该不该用var代替实际的类型呢?我们从且仅从代码编写的角度来看,即不考虑代码的性能及执行效率。
优点
1、 可使代码布局更加整洁
如下列代码:
使用"var"代替前
1 string str="this is some string";2 int i=123;3 ListmyList=newList ();
使用"var"代替后
1 var str="this is some string";2 var i=123;3 var myList=newList();
整洁程度一目了然。
2、 去除代码多余部分,精简代码量
依然以上述代码举例,我们可以很清楚地看出
1 ListmyList=newList ();
"myList"前后多次书写类型,冗余而繁琐。
引用stackoverflow中某位回答者的话:
1 Fungus:Do you like Do you like RedundantTextRedundantText?:D –MarkSimpsonDec9'09 at 13:32
缺点
1、 代码缺失可读性
如下代码:
1 var obj=myClass.GetSomeObjects();
当别人或一个月后的自己重新阅读这段代码的时候很难一眼看出obj到底是什么类型,当然
类名和方法名可能不会像上边这样糟糕,当然
借助于强大的IDE我们可以“轻易”地找到“GetSomeObjects”真正“return”了什么,但是
我们一定会在这寻找中消磨掉了时间和热情。
2、 给代码重构带来麻烦
使用"var"时,编译器会根据上下文推断你想使用的类型,但是项目的维护往往难以避免地将代码重构,假如:
1 var obj=myClass.GetSomeObjects();
GetSomeObjects() 返回类型为resultA类型,编译通过,后期代码维护过程中这样或那样的原因将返回类型改为了resultB(当然我们极力反对这样做),这时编译器是不报错的(有可能),只有运行时才会出现bug,而如果一开始就限定了实际需要的类型则不会出现这种情况。
综述
综上所述,var关键词有其优点也有缺点,我们择优用之,重要的一点是,Coding也是一种写作,不仅要让计算机读得懂,更重要的是让人同样读得懂,诚如题记。