Kotlin 科特林为什么不说“不”;新";关键词?

Kotlin 科特林为什么不说“不”;新";关键词?,kotlin,Kotlin,为什么kotlin删除了新的关键字? 这样就更难看出函数调用和对象分配之间的区别了。该文件明确指出: 名称使用camelCase(名称中避免下划线) 类型以大写字母开头 方法和属性以小写开头 如果您遵循上述操作,并将构造函数视为可调用的常规函数,即val invoice=invoice()则新建关键字将变为冗余。 一旦您适应了约定,就很清楚代码在做什么 事实上,即使在Java代码中,也会有许多隐式分配发生在方法调用(如或Guava)的下面,因此我认为您关于使用new关键字使分配可见性更好的论

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

该文件明确指出:

  • 名称使用camelCase(名称中避免下划线)
  • 类型以大写字母开头
  • 方法和属性以小写开头
如果您遵循上述操作,并
构造函数
视为可调用的常规函数
,即
val invoice=invoice()
新建
关键字将变为冗余。 一旦您适应了约定,就很清楚代码在做什么

事实上,即使在Java代码中,也会有许多隐式分配发生在方法调用(如或Guava)的下面,因此我认为您关于使用
new
关键字使分配可见性更好的论点是完全正确的

(IMO)之所以这样做,是因为函数和对象构造之间没有真正的区别,也就是说,没有任何东西阻止函数分配对象(它们经常这样做)

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


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

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

顺便说一句,在IDE中设置语法高亮显示是有意义的,这样它将以稍微不同的颜色高亮显示类名。这将使区分构造函数调用变得更加容易。对于kotlin来说,这是一个全新的问题,我希望有一个有意义的KT编译器错误,比如“不需要使用“new”关键字通过构造函数创建实例”,而不是“Unsolve reference:new”,这样可以在Cala使用
new
关键字时为我节省一点时间。只是有些情况下你不需要使用它,比如案例类。哦,你是对的。而且,使用伴随对象,可以使类可调用,并将其重定向到构造函数,从而有效地消除对新对象的需求。在我对Scala的简短调查中,我已经看到了这一点,并且忘记了这不是标准。