在过去的两年中,Duolingo将其全部Java Android App无缝地迁移到Kotlin。它带来的主要好处包括提高了开发人员的工作效率和幸福感,而Duolingo App几乎再也没有出现空指针异常(NPE)问题了。为了了解他们的迁移经验,InfoQ与Duolingo Android和Web开发负责人Chaidarun进行了交流。
自从谷歌宣布将Kotlin作为Android开发首选语言后,得益于其现代化的特性集,JetBrains的这门语言吸引了越来越多的开发商。2018年,为了提高生产率、稳定性和开发人员的幸福感,Duolingo(语言学习平台开发商)决定将Android开发迁移到Kotlin。
正如Duolingo Android和Web开发负责人Art Chaidarun所解释的那样,向Kotlin的转换始于每个开发人员将一些Java代码移植到Kotlin,并由更有经验的Kotlin开发人员承担导师角色。特别值得注意的是,Duolingo工程师定义了pull请求工作流,尽可能简化转换过程中的管理工作。具体来说,对于每个转换后的源文件,开发人员需要生成至少三个pull请求:第一个PR包含IntelliJ自动转换的结果;第二个PR包含对自动转换所引入的编译错误的修复;第三个PR包含使代码更符合习惯的更改。
根据Chaidarun的说法,转换到Kotlin后,代码行数减少了约30%,最多的减少90%。最终,Duolingo App的稳定性得到了极大改善,大多数NullPointerExceptions和IllegalArgumentExceptions都来自第三方依赖项,它们没有采用Kotlin编译器的可空注解。为了了解他们的迁移经验,InfoQ采访了Chaidarun。
InfoQ:将App迁移到另一种语言需要付出巨大的努力。您认为使这一努力获得成功的关键实践是什么?
Art Chaidarun:最重要的一个因素是语言的选择:Kotlin与Java非常相似,也就是说,它既便于开发人员学习,也便于IDE自动转换Java代码。然而,将Java转换成Scala或将Objective-C转换成Swift时,情况就不太一样了。同样重要的是,我们从一开始就对照Java工具准备好了相应的Kotlin工具(格式化器和代码分析器),这加强了一致性并降低了切换成本。
InfoQ:请您介绍下从Java自动转换到Kotlin的经验?您最常遇到的问题是什么?
Chaidarun:IntelliJ的自动转换器是这项工作的关键——如果没有它,我们甚至都不会尝试迁移。它非常安全,只在与反射相关的非常罕见的情况下才会导致运行时问题。最常见的问题是,为了兼容Java调用程序,我们必须手动将@JvmField和@JvmStatic注解添加到转换后的代码中,但这个事情做起来不难。
InfoQ:您能总结一下提高开发人员满意度的主要因素吗?
Chaidarun:与Java相比,属性、数据类和标准库扩展方法等特性极大地提高了Kotlin的信噪比,使得编写和检查代码变得更容易、更快速。
如果你对细节感兴趣,可以看下Chaidarun在Duolingo博客上的报道。
原文链接:
领取专属 10元无门槛券
私享最新 技术干货