在谷歌I/O 2017年的大会当中,有一个细节被好多人忽略掉了,那就是当Kotlin被宣告成为Android一级开发语言之际,现场响起了极其热烈的掌声。它并非是又一种所谓的“Java替代品”,而是一个源自圣彼得堡的小团队花费了5年时间去证实,在Java的“主场”把Java打败这件事情是有着完全的可能性的。

圣彼得堡的冬天与一行代码的诞生

2010年,圣彼得堡的冬天,格外寒冷,在JetBrains公司内部的会议室里,德米特里·杰梅罗夫盯着屏幕上编译器报错,陷入沉思,这家开发IntelliJ IDEA而闻名全球的公司,每天处理海量Java代码,团队受够了Java冗长语法以及缓慢演进速度,他们想要Scala的表达力,却无法忍受其平均45秒以上的编译耗时,这个速度在大规模重构时足以让程序员崩溃。

2011年7月,项目正式开始启动,其代号为Kotlin。它的名字取自圣彼得堡附近的科特林岛,开发团队于办公室里隔着芬兰湾望向那座岛屿。负责人安德烈·布雷斯拉夫定下严格规定:编译速度必须接近Java。此目标在2012年2月项目开源时基本实现,那时Kotlin的代码库还不到5万行。

 Kotlin 与 Java 互操作性 _编程入门Kotlin入门_Kotlin 编程语言

没有new关键字与那些被砍掉的分号

从事Java编程工作,初次写Kotlin的程序员,常常会有那么一瞬间愣住:创建对象为何不用new呢?这可不是在搞与众不同。团队对数以百万行计的Java代码予以分析之后察觉到,超过90%的new关键字仅仅是在做机械性的重复。把它去除掉,并且引入类型推断,代码会立刻变得精简。

支持派列举Scala和Go的先例,表明分号可省这个设计引发了激烈争吵,反对派担心老Java程序员不适应,最终的妥协方案是分号可写可不写,但官方推荐省略,字符串模板的语法直接致敬Unix shell,用$符号取值,“Hello, $name”比Java的“Hello ” + name拼接直观太多,这些细节没有一项是凭空发明,全是把其他语言验证过的好用特性捡了进来。

2012年那个最佳语言奖项的尴尬

2012年1月,当《Dr. Dobb‘s Journal》把当月最佳语言颁给Kotlin时,整个团队实际上高兴不起来。杂志编辑明显看好这门新语言的静态类型特性以及Java互操作性,然而此时Kotlin连1.0版本都尚未有,社区用户数量不到2000人。更为现实的问题在于,JetBrains要依靠这个新语言来拉动IDEA的销售,即只有开发者为了撰写Kotlin而购买付费版IDE,公司方能收回研发成本。

就这个商业目标而言,一直到四年之后才算是真正达成了。在2016年2月15日,Kotlin 1.0正式发布,其下载量在首周就突破了10万次。对于此,布雷斯拉夫在发布会上特地郑重强调:“从当下开始,我们会始终维持长期向后兼容的状态,你现今所编写的代码,即便在五年之后依旧能够正常运行。”。

谷歌为什么偏偏选中它

2017年5月17日,在加州山景城,谷歌Android团队负责人史蒂夫·霍洛维茨站于I/O大会舞台之上,宣布Kotlin成为官方支持语言之际,台下众多Java拥护者的脸色变得铁青。实际上,谈判早在2016年底就已秘密开启,谷歌内部对Ceylon、Groovy等诸多JVM语言进行了评估,最终选择Kotlin的理由极为务实,呈现出Java互操作性满分的状况。这表明现有Android项目能够混合Kotlin文件逐步实现迁移,而无需推倒重来。

另有一个潜藏因素,甲骨文与谷歌围绕Java API版权的诉讼,当时正处于最为僵持不下的时期,谷歌需要备用选项,而Kotlin于圣彼得堡诞生这一情况,此时意外变成了有利因素。

上海地铁与旧金山银行的真实迁移案例

2018年,上海地铁的“Metro大都会”App开启技术重构,有600多个Java文件要改造,团队运用混合编译模式,新功能用Kotlin编写,旧模块维持Java。运维总监徐立平最为担忧稳定性,然而上线后崩溃率反倒下降37%。经分析日志发觉,Kotlin的空安全设计在运行时挡住了大量原本会在生产环境发作的NullPointerException。

有一家位于旧金山的跨国银行更为激进,在2019年的时候,把交易系统的核心模块完全使用Kotlin进行了重写。技术负责人给出的理由是,Kotlin的数据类能够比Java少写80%的getter/setter代码,在对复杂金融对象的处理方面,开发效率的提升不止达到了一倍。这个模块一直稳定运行到现在已经接近四年的时间了,没有出现重大生产事故。

圣彼得堡团队留下的那本电子书

JetBrains开发文档主管斯维特兰娜·伊萨科娃,至今留存着一份2015年的内部邮件,其附件是Kotlin官方参考文档的初稿,团队规定每一章都得配套至少三个真实代码示例,且所有示例都要在本地编译通过,这本后来被翻译成12种语言的电子书,至今保持着技术文档领域的一个记录,即读者反馈的问题,平均在三个工作日内会得到修改。

2023年,圣彼得堡团队有超80名工程师,他们分散于多个时区进行远程协作。科特林岛上灯笼每晚依旧亮起,他们所创造的语言,如今每月有超200万开发者使用。而且,你于Android Studio里敲下的每行Kotlin代码,编译后都在证实:编程语言的好坏并非取决于血统,而是取决于解决实际问题的能力。

你是于哪一年,着手尝试运用Kotlin去替换Java来编写生产代码的呢?在这个过程中,碰到过什么样的问题,又获得了何种便利呢?诚邀诸君在评论区分享诸位的迁移经历,点赞数较多的朋友,我们将会送出JetBrains全家桶月度订阅码。