News

Kotlin 功能特性调查报告 2021

Read this post in other languages:
English, Français, 한국어

几个月前,我们发起了第二次 Kotlin 最受期待功能投票。 这项调查的主要目标是获得您对 Kotlin 未来功能相对重要性的看法,并了解用户场景的多元化。 这项调查将帮助我们确定长期语言开发计划的优先级。 我们由衷感谢每一位参与调查并回答问题的人士!

您可以在下方找到调查结果以及由 Kotlin 项目负责人 Roman Elizarov 撰写的文章,文中介绍了我们针对得票最高的功能制定的计划。 如需更多信息,请参阅功能说明并观看由 Roman Elizarov 和 Svetlana Isakova 主持的在线讲座。 

请注意此项调查并非详尽无遗。 调查并未涵盖我们目前正在开发的功能,调查中包含的功能也处于不同的开发阶段。 我们无法保证调查内的任一功能会被加入到语言当中,即使该功能获得了大量投票。 您也不会在 1.6.x 版本中看到调查内的任一功能,我们会根据大家的投票来规划长期的工作优先级。

调查要求受访者完成以下三项内容:

  1. 最多选择 3 项他们希望添加到语言中的功能(必选)。
  2. 确定一项他们永远不想使用的功能(可选)。
  3. 解释他们为什么不希望语言具有此功能(可选)。

我们还提供了选项,使受访者可以选择分享其 Kotlin 使用年数、使用 Kotlin 的目标以及使用 Kotlin 开发软件的类型等信息,这有助于我们更好地了解各种用例的性质。

我们收到了 1,540 份完整回复。 您可以获取匿名的原始数据,以便深入研究。

最受期待的功能

排名前三的功能如下:

  1. Multicatch 和联合类型 (45%)
  2. 集合文字 (32%)
  3. 扩展函数和属性的多个接收器 (30%)

但位列第 4 到第 9 位的功能也同样获得了来自社区的大量投票。 排在末位的六项功能得票明显较少。 包括针对可 null 和基元类型的 Lateinit 以及诸如 I 和 & 的可重载逐位运算符在内的功能则被评选为最不受期待的三项功能。 

 由于实现 Multicatch 和联合类型功能有多种方法,我们请 Kotlin 社区分享了他们更喜欢两种可行实现方法中的哪一种:

  • 87% 的受访者投票支持联合类型。该方法支持声明可返回其中一项可能值的函数,而完全不必引入专用的 ParseResult 类型。
  • 13% 的受访者建议我们对异常不做任何特定更改,因为现代化 Java API 不太会滥用异常(并且旧的 API 最终会被取代)。 他们更喜欢使用类似枚举的简洁语法来声明密封类,以使 Kotlin 风格的错误返回函数更易于编写。

最不受期待的功能

受访者并不是积极反对某些功能。 40% 的受访者表示,他们对于正在实现的任何被提名的功能均没有意见。 其他选择分布如下。 排名前 3:

  • 诸如 I 和 & 的可重载逐位运算符:10%
  • Package-private 可见性:7%
  • 针对可 null 和基元类型的 Lateinit:6%

用户情况统计

71% 的受访者拥有 2 年以上的 Kotlin 使用经验。

85% 的受访者在编写产品代码时使用 Kotlin

您还可以查看受访者所开发软件的类型。

Roman Elizarov 的结论和状态更新

几乎所有得票数较高的功能都已处于 Kotlin 团队的不同研究阶段当中。

  • Multicatch 和联合类型 (KT-13108) 是最受欢迎的语言潜在附加功能,但同时也是在语言中集成方面复杂程度最高的功能。 它的实现需要由核心编译器团队中的许多专家协力完成,因此鉴于团队正在忙于将 K2 编译器前端投入生产,请不要指望我们在短期内取得很大进展。 但前端一经发布,我们将立即开始积极开发联合类型。
  • 集合文字 (KT-43871) 尚未纳入我们当前的公开路线图,但实际上我们已经开始了一些早期原型设计,以了解哪些设计方法将会奏效。
  • 多个接收器 (KT-10468) 距预览版发布近在咫尺。 您很快就能使用预发布版本编译器开关来使用它们。 敬请关注!
  • 基于名称的析构 (KT-19627) 有一些颇具争议的语法选项,因此我们正在计划对各种语法选项进行用户体验研究,以了解其中哪些语法更易于 Kotlin 开发者理解。
  • 具有“public”和“private”属性类型 (KT-14663) 已被证实在新的 K2 编译器前端的架构中相对易于实现,并将随新版编译器提供预览。
  • Package-private 可见性 (KT-29227) 受到很多用户的喜爱,但同时也在“最不受期待的功能”中排名第二。 它有多种设计选项,其中一些选项可能会提高语言的学习难度,因为新手开发者所需应对的选择更多。 我们正在认真解决这一问题,就像设计 Kotlin 可见性的原始方法一样,我们目前正在研究有关 Kotlin 开发者如何构建其代码库的实际数据,以及哪种解决方案、哪种默认设置才能保持 Kotlin 精神:默认设置应使您能够轻松入门,而随着您的项目日益复杂也仍然可以提供调整和自定义的能力。

英文博文原作者:

Lei

Alina Dolgikh

Discover more