为什么kotlin会删除新关键字? 这使得查看函数调用和对象分配之间的区别变得更加困难。
答案 0 :(得分:16)
Kotlin Coding Conventions明确指出:
- 使用camelCase作为名称(并避免使用名称中的下划线)
- 类型以大写字母开头
- 方法和属性以小写字母开头
如果您按照上述内容并将constructor
视为常规功能,可以调用val invoice = Invoice()
new
关键字变为冗余。
一旦你适应了约定,就可以清楚地看到代码正在做什么。
事实上,即使在Java代码中,您也会有很多隐式分配发生在Collections.singleton(o)
或Guava Lists.newArrayList()
之类的方法调用之下,所以我不认为你使用new
关键字更好地分配可见性的论点是完全有效的。
答案 1 :(得分:12)
(IMO)这样做是因为函数和对象构造之间没有真正的区别,即没有什么能阻止函数分配对象(他们经常这样做)。
一个很好的例子是工厂功能。这些函数创建了新对象,但它们绝不是类构造函数。
AFAIK,new
关键字是因为C \ C ++的负面体验而创建的,其中返回新对象的函数必须经过特殊标记(按名称约定),以免忘记(手动)释放记忆。在像Java \ Kotlin这样的自动内存管理语言中,它不是一个问题。
答案 2 :(得分:3)
其他几种语言没有new
关键字(Python,Scala,也许是锡兰),而且切换到这些语言的人似乎从未错过它。我知道我不会。