[博客翻译]我对Kotlin的思考:4年后的展望


原文地址:https://tylerrussell.dev/2025/01/10/my-thoughts-on-kotlin-perspectives-after-4-years/


我对Kotlin的看法:四年后的视角

阅读时间:24分钟

每当我向其他开发者解释Masset使用Kotlin作为我们的主要后端语言时,我常常会看到他们脸上露出疑惑的表情。“那个Android语言?用在你们的后端?这听起来有点奇怪……你们有没有考虑过用Rust重写?”🤨

作为回应,我发现自己常常难以详细解释我到底喜欢Kotlin的哪些方面,以及为什么我们选择它作为我们的默认语言。不管好坏,我们这些技术人在技术选择上总是非常挑剔的。

从理论上讲,Kotlin(作为后端语言)确实存在许多常见的缺点。编译速度较慢、JVM的限制、单一公司的支持等等。但一次又一次,我发现自己只是简单地说:“我不知道,但它就是让人感觉非常高效。”Kotlin与我们在Masset的工作方式非常契合。我们只想把事情做好,而Kotlin做到了。我也听到其他开发者说过同样的话。

在我职业生涯中使用Kotlin超过四年后,我觉得我需要一个更好的解释。所以在过去的三个月里,每当我遇到与Kotlin相关的“顿悟时刻”时,我都会把它记录下来。无论是好的还是坏的。

经过一段时间的记录,我得出了一个我一直怀疑的结论:我喜欢的并不是Kotlin的某个单一、特别或独特的特性。我的喜爱来自于许多小细节的集合,这些细节甚至不一定是独特的。但当它们结合在一起时,就让人感到愉悦

对于那些可能偶然从互联网上看到这篇文章的人:请理解,在接触Kotlin之前,我日常使用的是Java和Javascript,长达15年。如今,我主要使用Kotlin和Typescript。在此期间,我还用Rust、Go、Typescript、C#、C、PHP和Python编写过一些规模不小的项目(超过1万行代码)。我从不认为自己精通这些语言和生态系统,但我对它们有足够的了解,觉得自己有相当的经验。

然而,由于我的背景,我的比较自然会偏向JVM。我完全承认,这个列表中的项目并不是Kotlin独有的。我知道许多其他语言也有相同或类似的功能。但在这个练习中,我试图根据我的个人经验来描述我喜欢(和不喜欢)的东西。

那么,这些东西是什么呢?下面我列出了一小部分让我印象深刻的内容。以下是我对Kotlin的随机记录,简单地分为“好的”、“坏的”和“丑陋的”,没有特定的顺序。

好的

  1. 空安全引导防御性编程
    空安全是Kotlin相对于Java的一个显著优势。它不仅仅防止了NullPointerException,还迫使你主动思考错误条件以及在这些条件下该如何处理。这种思维方式改变了你编写代码的结构。
  2. ?:?. 用于控制流
    由于空值在Kotlin中无处不在,处理它们变得更加容易。?:?. 操作符在控制流中非常有用,尤其是在处理默认值和条件逻辑时。
  3. 标准库几乎无所不能
    Kotlin的标准库非常强大,几乎为所有常见的算法提供了现成的函数。这让开发变得更加轻松,减少了重复造轮子的需求。
  4. 表达式简化代码
    Kotlin中的一切都是表达式,这使得数据流管理和代码简化变得更加容易。if/elsewhentry/catch等都可以作为表达式使用,减少了代码的复杂性。
  5. 生态系统
    如果你讨厌Java生态系统,但又想在JVM上使用Kotlin,那还是算了吧。Kotlin虽然可以独立于其他生态系统存在,但在后端服务中,你基本上还是生活在JVM/JDK生态系统中。Kotlin可以让你享受到Java生态系统的巨大优势,同时摆脱Java的“最佳实践”束缚。
  6. (私有)扩展函数非常棒
    扩展函数允许你在不修改类的情况下为其添加功能。通过将扩展函数设为私有,你可以限制其作用范围,避免全局污染。
  7. 务实的最佳实践
    Kotlin让人感觉它解放了JVM,摆脱了Java的教条式实践。它更注重“什么是高效且足够好”,而不是“什么是完美的”。
  8. 数据类
    数据类非常简洁和灵活,几乎不需要手动实现`