这可能会被关闭,但无论如何我都会尝试。
前几天我向VB6程序员展示了一些我的C#代码,他注意到了var关键字,就像“哦,一个变种类型,当你这样做时,打字不是很强。”我不得不继续典型的“var!= VARIANT”演讲向他解释它不是一个只是编译推断的变种。
我在考虑他们(C#团队)可以使用的其他词语,所以这种事情没有发生。我个人喜欢推断,例如:
infer person = new Person("Bob");
我知道这不是什么大不了的事,但只是好奇地看到其他人会用来做同样的事情。
我已将其设为社区维基,因为它没有真正的答案。
答案 0 :(得分:7)
C ++ 0x使用“auto”关键字进行类型推断:
http://en.wikipedia.org/wiki/C%2B%2B0x#Type_inference
对于那些家伙而言,这并不是一个糟糕的权衡,因为“自动”(AFAIK)已经是一个关键词。我可以在C#中想象它:
auto i = 3;
我确实喜欢“推断”(但是我对“var”也没有任何问题)。
答案 1 :(得分:4)
thisappearsweaklytypedbutisactuallystronglytyped i = 3;
这是避免混淆的唯一方法!不用担心,自动填充意味着输入它不会花费更长的时间......
答案 2 :(得分:3)
如何恢复BASIC
关键字LET
?
let answer = 42;
答案 3 :(得分:2)
但“ 推断 ”比“ var ”还多2个字符......也许是“var”起初不是最好放在VB6程序员面前......
答案 4 :(得分:1)
我认为这是个好主意。我自己不得不不时地解释var关键字,它实际上只是一个类型的占位符,它仍然保证了强类型。
推断 对我有用! :)
答案 5 :(得分:1)
foo 怎么样?
答案 6 :(得分:1)
另一方面,Pascal / Delphi和ActionScript程序员立即掌握var
的真正含义。那么为什么选择VB6呢?遗憾的是它里面有Variant
,因此VB6的人很快就用var
代替它,但无论你走哪条路,某个地方的人都会感到困惑。
鉴于VB6现在已经存在了很长一段时间,var
对于没有过去经验负担的人来说是完全清楚的(我的意思是,有多少新编程人员会想到var
意味着与“变量”不同的东西?),并且var
被其他几种流行语言专门用来表示“变量”,它似乎不是一个糟糕的选择。
我看到infer
关键字给出的明显问题是它推断出变量的类型并不明显。只要看一下它,它也可以推断它的价值或其他东西(特别是如果RHS不是new
- 陈述)。
答案 7 :(得分:1)
我喜欢var
,并且认为强类型语言背景中的含义是清楚的。另一方面,dynamic
是C#代码中的“古怪”,因此较长的语义命名是合适的。
答案 8 :(得分:1)
C#应该是象征性的,就像C ++一样,而不是像VB一样关键词。 “?”
怎么样?? X = 5;
? Y = X.ToString();
? Z = Y + Y;
Z是什么类型的?谁知道?
答案 9 :(得分:1)
我认为C#会更好,没有“静态类型推断”关键字。所以它会像这样工作:
myDict = new Dictionary<string, MyClass>();
我想知道为什么C#设计师觉得静态类型推断需要像“var”这样的关键字。是否有必要遵守C#的基本语法规则?是因为他们已经考虑过“动态”,并希望在静态和动态类型推断之间更清楚地区分?
无论如何,在长时间暴露于Python之后,“var”(或任何替代关键字或限定符)感觉完全是多余的。请使用以下代码:
foreach ( item in myList ) {
// Do stuff
}
在“item”前添加“var”的其他信息会给读者带来什么?
答案 10 :(得分:0)
如果关键字的名称为variable
而不是var
,那么我们可能不会看到这种混淆。这可能是意图,但有人明显认为打字variable
太冗长,导致我们今天的模棱两可。
答案 11 :(得分:0)
不完全是主题,但VB.NET几乎干净利落。我敢打赌,对于前VB6用户来说,这更令人困惑。
Dim p = New Person()
那是使用后期绑定还是类型推断?更好地检查项目属性。