gpt4 book ai didi

java - 依赖类型推断如何影响代码的可维护性?

转载 作者:行者123 更新时间:2023-11-30 04:49:29 24 4
gpt4 key购买 nike

虽然此问题中的示例是 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 是某个浮点值,但如果不回头看,就无法判断它是单精度还是 double 在Temperatures声明处。根据代码的编写方式,Temperatures 可能会更早地声明,因此需要读者返回并找到声明,然后继续阅读。诚然,当使用好的 IDE 时,这并不是什么大问题,因为将鼠标光标快速悬停在变量名称上会显示类型。

此外,我认为在某些情况下使用类型推断可能会在尝试更改代码时引入一些错误。考虑以下(诚然是人为的)示例,假设类 AB 执行完全不同的操作。

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 的类型从 A 更改为 B,并且代码可以编译,但功能会有所不同,这可能表现为代码其他部分的错误。

通过一些类型推断的例子,我想大多数人都会同意它的使用对可读性或可维护性没有负面影响。例如,在 Java 7 中,可以使用以下内容:

ArrayList<String> a = new ArrayList<>();    // The constructor type is inferred from the declaration.

而不是

ArrayList<String> a = new ArrayList<String>();

我很想知道人们对此事的看法,以及是否有关于应如何广泛使用类型推断的任何建议。

阿姆尔

最佳答案

就我个人而言,我倾向于仅在类型清晰并且使代码更易于阅读的情况下才使用隐式类型推断

var dict = new Dictionary<string, List<TreeNode<int>>>();

更容易阅读
Dictionary<string, List<TreeNode<int>>> dict =
new Dictionary<string, List<TreeNode<int>>>();

但类型是明确的。

<小时/>

这里并不清楚你得到什么,我会明确指定类型:

var something = GetSomeThing();
<小时/>

这里使用 var 没有任何意义,因为它没有简化任何东西

int i = 0;
double x = 0.0;
string s = "hello";

关于java - 依赖类型推断如何影响代码的可维护性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com