尽管此问题中的示例使用 Visual Basic.NET 和 Java,但该主题也可能适用于实现类型推断的其他语言。
到目前为止,我只在 VB.NET 中使用 LINQ 时使用过类型推断。但是,我知道类型推断可以用于语言的其他部分,如下所示:
Dim i = 1 'i is inferred to be an Integer
Dim s = "Hoi" 's is inferred to be a string
Dim Temperatures(10) as Double
For T In Temperatures 'T is inferred to be a Double
'Do something
Next
我可以看到类型推断如何减少我需要编写一段代码的输入量,并且还可以更快地更改基本变量的类型(例如Temperatures(10)
上面),因为您不需要更改类型访问它的所有其他变量(例如T
)。但是,我担心缺少明确的类型声明可能会使代码更难阅读,比如在代码检查期间,因为变量的类型可能不是很明显。例如,通过仅查看上面的 For 循环,您可能会正确地假设它T
是某个浮点值,但如果不回头查看Temperatures
. 根据代码的编写方式,Temperatures
可以更早地声明,因此需要读者返回并找到声明,然后继续阅读。诚然,当使用一个好的 IDE 时,这并不是什么大问题,因为将鼠标光标快速悬停在变量名称上会显示类型。
另外,我想在某些情况下使用类型推断可能会在尝试更改代码时引入一些错误。考虑下面的(诚然做作的)示例,假设类A
和B
做完全不同的事情。
Class A
Public Sub DoSomething()
End Sub
End Class
Class B
Public Sub DoSomething()
End Sub
End Class
Dim ObjectList(10) As A
For item In ObjectList
item.DoSomething()
End For
可以更改ObjectList
from A
to的类型,B
代码可以编译,但功能不同,这可能表现为代码其他部分的错误。
通过一些类型推断的例子,我想大多数人都会同意它的使用对可读性或可维护性没有负面影响。例如,在 Java 7 中,可以使用以下内容:
ArrayList<String> a = new ArrayList<>(); // The constructor type is inferred from the declaration.
代替
ArrayList<String> a = new ArrayList<String>();
我很想知道人们对这个问题的想法是什么,以及是否有任何关于应该如何广泛使用类型推断的建议。
阿米尔