更好的词来推断变量以外的变量

时间:2009-08-11 23:28:03

标签: c# language-design

这可能会被关闭,但无论如何我都会尝试。

前几天我向VB6程序员展示了一些我的C#代码,他注意到了var关键字,就像“哦,一个变种类型,当你这样做时,打字不是很强。”我不得不继续典型的“var!= VARIANT”演讲向他解释它不是一个只是编译推断的变种。

我在考虑他们(C#团队)可以使用的其他词语,所以这种事情没有发生。我个人喜欢推断,例如:

 infer person = new Person("Bob");

我知道这不是什么大不了的事,但只是好奇地看到其他人会用来做同样的事情。

我已将其设为社区维基,因为它没有真正的答案。

12 个答案:

答案 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()

那是使用后期绑定还是类型推断?更好地检查项目属性。