Lucian Wischik 回应了 Mads Torgersen 的演讲,提出了 Visual Basic 语言方面一些可能的变化。这些只是计划,一切还没有定数。这些变化主要是为了减少样板代码,并且没有提供我们在 VB 10 或 11 中看到的重大改变。
只读属性
只读自动属性与 VB 语法可谓天作之合。只需要在属性声明前面加上 ReadOnly 关键字即可。它能保证只生成 getter,不过仍然可以在构造函数中设置该值。
ReadOnly Property Name As String
注释
VB 中的注释现在不能很好地与隐式续行符配合。因此 Lucian 列出的的第一个 VB 特性就是允许在隐式续行符后面使用注释。
字符串
Visual Basic 中的字符串目前不支持多行。因此首要的任务是允许这一点。其行为类似 C#的逐字字符串,但不需要前缀。
更有趣的特性是字符串插值(String Interpolation)。使用 $"前缀,将不需要显式调用 String.Format。它还消除了因为算错替代变量的数目和位置而导致的异常。例如下面的代码:
Dim query = $"http://{ url }?name={ Escape(name) }&id={ Escape(id) }&o=xml"
在差不多 4 年前,Miguel de Icaza 就曾提议在C#中支持字符串插值,并构建了一个工作原型。
字面量
Visual Basic 的日期字面量基于美国通用标准,这对于非美国开发者是相当不公平的。因此新的计划中可以允许 ISO 格式化的日期字面量。
很多语言中已经具备的二进制字面量也被列入计划当中,用 &B 前缀表示。这对标志位风格的枚举来说是一个福音。
分部接口和模块
这项提议允许在 VB 中加入分部接口和模块,其用法与分部类相似。与分部类相同,这也是为了用于代码生成器。
空传播
与 C#类似,VB 团队也考虑提供空传播操作符。这样在调用方法之前就不再需要空验证。目前他们有两种选择,第一种与 C#一样。注意除了?. 外,还有?()。
Dim y As Integer = x?.y?(3)?.z
如果?. 或?(操作符的左边有空值,y 将得到默认值 z。
函数参数
与 C#类似,VB 也希望 params 关键字支持 IEnumerable 类型的参数,而不是只支持数组。
同样跟 C#类似的是,他们也希望能够在 out 实参中声明本地变量。
If Integer.TryParse(s, Out x) Then
这行代码会创建 x 变量,就好像它是在代码上面的语句中声明的。
他们也在考虑内联地声明其他变量。
If ( Dim x = GetValue()) > 15 Then Console .WriteLine(x)
其他方面
目前 VB 使用 IsNot 进行引用比较,但不能用于类型比较(如 TypeOf 操作符)。这项建议填补了这一空白。
原文英文链接: Future Plans for VB
评论