捍卫Kotlin的默认违约行为

有人反对Kotlin默认将类,方法等公开的决定(当未使用可见性修饰符时),我只想提出为什么我认为JetBrains对此做出了正确的决定。

那些反对它的人提出了隐藏所有可以逃避的东西以保持封装的原则,并且如果这样做太容易了,人们会公开那些不应该公开的东西。 我可以理解他们的观点,但我认为这似乎不像他们认为的那样重要。 首先,在JetBrains对Java代码库的研究中,公共用途的使用量是私有用途的2.5到5倍,我同意Kotlin的决定,即默认使用public使它变得更加整洁。 有一个反对的说法,主要是指出大多数公共工件应该更类似于Kotlin的internal修饰符,但是必须公开,因为Java的可见性选项不是“正确的”选项集。 您可以在此处详细了解此参数。 同样,您可以这样说,实际上,只有那些类在保持其属性公开的同时才需要是内部的。 除非该类是从公共场所继承的,否则应该足以防止其他代码被访问。

但是,如果您遵循这条路线,您可能必须重新开始,也许不同的事物应该具有不同的默认值。 顶级函数和类将默认为内部函数,但属性几乎需要是公共的,因为它们的主要用例是提供对它们后面字段的间接公共访问(此外,必须在主要属性的大多数属性前面包含public构造函数会很烂;我不得不使用private那几次很痛苦。 但是,要想跳到这一思路的末尾,似乎对于不同的事物使用不同的默认值将最终导致混乱,尤其是对于使用该语言的新手。 这不是我们想要的。

但是,我默认使用internal最大问题是(据我所知),它实际上在Kotlin之外没有任何意义。 我很确定内部事物实际上是公开的,但是它们带有某种标记,Kotlin会使用这些标记来确定内部状态。 Java会将它们简单地视为公共类,因此很容易解决这些限制。 我还没听说过internal如何使用Java 9+模块的信息,这也许是正确的,但是我认为Kotlin对模块的定义要灵活一些,所以我不确定它们的兼容性如何。 不过,老实说,我对这两种方法都不了解,无法做出有根据的回应。

缺省将公开以外的东西设为默认的最有力的反对意见是,增长最快的两种流行语言(Python和JavaScript)除了绕行方式外没有其他选择。 诚然,受欢迎程度并不能直接衡量其良好程度,但是它确实表明,很多人并不认为可见性修饰剂非常重要,因此公开上市是最简单的方法。

您可以不同意; 没关系。 我只给我2美分。

翻译自: https://www.javacodegeeks.com/2018/01/defending-public-default-kotlin.html

你可能感兴趣的:(java,python,人工智能,编程语言,封装)