![]() |
1
61
除了显而易见的用途
总的来说,静态输入让我不愿意放弃它,这给了我一种安慰(因为我想要一个更好的单词)。我喜欢这样的感觉,当我声明一个变量时,我知道我在做什么。声明变量不仅仅是告诉编译器一些事情,它还告诉读取代码的人一些事情。
让我举个例子。假设我有一个方法返回
很明显,对吧?事实上,这是一个你可以很容易使用的地方
真的。但是 这 代码的版本不仅仅是声明一个变量,它还告诉我编写代码的人打算做什么:
编写代码的开发人员告诉我“我不会更改这个列表,也不会使用索引来访问它的成员。我要做的就是迭代它,“这是在一行代码中需要了解的大量信息。如果你使用它,你就会放弃
当然,如果你一开始不使用它,你就不会放弃它。如果你是那种会写那行代码的开发人员,你已经知道你不会使用
编辑: 我刚刚重读了乔恩·斯基特的文章,埃里克·利珀特的这句话突然出现在我面前:
我认为,实际上在很多情况下,使用隐式类型会留下隐式的内容。不谈什么也没关系。例如,我将随意编写一个Linq查询,如下所示:
当我读到这段代码时,我想当我读到它的时候
这是一个例子 还没有 已明确表示。它留给我去推断。 现在,在我使用LINQ的大约90%的情况下,这一点都不重要。因为90%的时间,下一行代码是:
但不难想象在代码中声明
|
![]() |
2
41
对于这个问题,你会有很多不同的看法——从“随处使用var”到“只使用匿名类型的var,基本上你必须这样做。”我喜欢 Eric Lippert's take on it :
就我个人而言,我没有
倾向
如果类型不太明显,就使用它——在这里,我将LINQ查询包含为“相当明显”。我不会这么做的
如果在赋值运算符的右侧有一个构造函数调用,那么我更可能使用
|
![]() |
3
11
我个人只在两个地方使用VaR:
即,这是第2点的一个例子:
编辑 这是对乔恩·斯基特问题的回应。 上述答案实际上是简化的。基本上,我用 var 其中类型为:
在工厂方法的情况下,在编写代码的地方,您所需要知道的是,返回的对象是某种类型的后代,并且 某种类型 有一个静态工厂方法,那么我将使用 var . 这样地:
上面的示例是我的代码中的一个真实示例。很明显,至少对我和使用此代码的人来说, 连接 是一个databaseconnection子代,但不需要确切的类型来理解或使用代码。 |
![]() |
4
9
我尝试了“到处使用var”的风格…这就是为什么我没有继续使用它。
尽管如此,我还是在Linq中使用它。 |
![]() |
5
3
来自函数编程的领域,在那里类型推理统治着一天,我使用
在Visual Studio中,如果您想知道本地语言的类型,只需将鼠标悬停在它上面。 |
![]() |
6
3
这个 post 在何时使用var类型接口或对象类型上有一些好的指导线。 |
![]() |
7
3
我倾向于使用
|
![]() |
8
1
我想这是有趣的注意到这通常是如何处理哈斯克尔。多亏了 Curry-Howard isomorphism 可以推断haskell中任何表达式的(最一般的)类型,因此在任何地方基本上都不需要类型声明,但有一些例外;例如,有时您故意希望将类型限制为比推断的更具体的类型。
当然,所需要的和推荐的不是同一件事;实际上,约定似乎是顶级定义总是有类型声明,而本地化定义则忽略了类型声明。这似乎在定义整体可读性的明确性与本地“助手”或“临时”定义的可读性的简洁性之间取得了良好的平衡。如果我理解正确,你就不能用
|