为什么kotlin删除了"new"关键字?

use*_*073 16 kotlin

为什么kotlin删除关键字?它使得查看函数调用和对象分配之间的区别变得更加困难.

mie*_*sol 21

科特林编码约定明确指出:

  • 使用camelCase作为名称(并避免使用名称中的下划线)
  • 类型以大写字母开头
  • 方法和属性以小写字母开头

如果你按照上面的和治疗constructor作为常规功能,可以调用即val invoice = Invoice()new关键字变得多余.一旦你适应了约定,就可以清楚地看到代码正在做什么.

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

  • 顺便说一句,在IDE中设置语法高亮显示是有意义的,这样它将突出显示*略微*不同颜色的类名.它将使区分构造函数调用变得更加容易. (2认同)

vod*_*dan 14

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

一个很好的例子是工厂功能.这些函数创建新对象,但它们绝不是类构造函数.

AFAIK,new关键字的创建是因为C\C++的负面体验,其中返回新对象的函数必须经过特殊标记(按名称约定),以免忘记(手动)释放内存.在像Java\Kotlin这样的自动内存管理语言中,它不是一个问题.


Jac*_*man 5

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