为什么 kotlin 放弃 "new" 关键字?

Why did kotlin drop the "new" keyword?

为什么 kotlin 删除了 new 关键字? 这使得更难看出函数调用和对象分配之间的区别。

Kotlin Coding Conventions 明确指出:

  • use of camelCase for names (and avoid underscore in names)
  • types start with upper case
  • methods and properties start with lower case

如果您按照上面的步骤 constructor 视为可以调用的常规函数​​ val invoice = Invoice()new 关键字变为 多余。 一旦您适应了惯例,就很清楚代码在做什么。

事实上,即使在 Java 代码中,您也会有许多 隐式 分配发生在 Collections.singleton(o) or Guava's Lists.newArrayList() 这样的方法调用之下,所以我不认为您关于使用 new 关键字更好地分配可见性的论点是完全有效的。

(IMO) 这样做是因为函数和对象构造之间没有真正的区别,即没有什么可以阻止函数分配对象(他们经常这样做)。

工厂函数就是一个很好的例子。这些函数创建新对象,但它们绝不是 class 构造函数。

AFAIK,new 关键字是由于对 C\C++ 的负面体验而创建的,其中返回新对象的函数必须特别标记(按名称约定),以免忘记(手动)释放内存。在像 Java\Kotlin 这样的 auto-memory-managing 语言中,这不是问题。

其他几种语言没有 new 关键字(Python、Scala,也许是 Ceylon),切换到这些语言的人似乎永远不会错过它。我知道我不知道。