Use 'var' or not

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 List<SomeClass> myList=newList<SomeClass>();

使用"var"代替后

1 var str="this is some string";
2 var i=123;
3 var myList=newList<SomeClass>();

 

整洁程度一目了然。
 
2、去除代码多余部分,精简代码量
依然以上述代码举例,我们可以很清楚地看出
 
1 List<SomeClass> myList=newList<SomeClass>();

 

 
"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也是一种写作,不仅要让计算机读得懂,更重要的是让人同样读得懂,诚如题记。
 
posted @ 2016-07-12 15:29  M号的马先生  阅读(190)  评论(0)    收藏  举报