VB 的未来计划

  • Jonathan Allen
  • 姚琪琳

2013 年 12 月 25 日

话题:语言 & 开发

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

语言 & 开发