[译] 将 Kotlin 应用于现有 Java 代码的策略

简介: 本文讲的是[译] 将 Kotlin 应用于现有 Java 代码的策略,自 Google 在 I/O 大会上发布最新消息(译者注:Google 宣布 Android Studio 将默认支持 Kotlin)起,事情变得疯狂起来。
本文讲的是[译] 将 Kotlin 应用于现有 Java 代码的策略,

将 Kotlin 应用于现有 Java 代码的策略


将 Kotlin 应用于现有 Java 代码的策略

自 Google 在 I/O 大会上发布最新消息(译者注:Google 宣布 Android Studio 将默认支持 Kotlin)起,事情变得疯狂起来。在过去的两周内,Kotlin 周报邮件列表的订阅人数增长了 20% 以上,文章提交数增长超过 200%。我所组织的线下交流(Kotlin 慕尼黑用户组)的参与人数大幅增长。所有这一切伴随着开发者社区总体的爆发性增长。

一个还会不断增长的趋势。

总之现在来看,未来将会如何发展是很显然的。尽管 Google 承诺将继续支持 Java,但Google 和 Oracle 之间的法律纠纷以及 Kotlin 是一个更加简洁、高效、强大的语言的清晰事实正在标志着你学习的方向。我发现下面这个推文相当有预见性。

几个月前,当我出现在与 Kotlin 相关的讨论、社区中时,可能最常被问及的问题是,现在是否是一个迁移至 Kotlin 的好时机。我的回答始终不会变:是的。进行 Kotlin 迁移有很多收益,且几乎没有任何坏处。我所能想到的唯一一个技术上的副作用是方法数将会增多,因为 Kotlin 标准库(目前)增加了 7191 个新方法。综合利弊来看,这是一个完全可以接受的不足。

既然这个问题的答案是毫无争议的肯定,我意识到另一个问题在浮现出来:开始使用 Kotlin 应该采取什么样的步骤?

本文旨在向那些困惑从何开始或寻求灵感的人们提供一些自己的想法。

1.- 从测试开始

是的,我知道测试是有限制性的。单元测试确切是指:你所测试的(是)独立单元和模块。当你所拥有的一切只是一群单独的类和可能的少量辅助类时,开发复杂的架构网是很困难的。但是这是一种对新语言建立认知和拓展的非常廉价和高效的方法。

我所听到的一个最常见的反对 Kotlin 的观点是,要避免在生产环境中部署 Kotlin 代码。虽然在我看来这是一种非常有偏见的观点,我想向你强调的是,如果你从测试开始,没有任何代码会被实际部署(到生产环境)。取而代之的是,这些代码可能会在你的持续集成环境中被使用,而这也是一种拓展知识的方式。

开始用 Kotlin 书写新的测试吧,它们可以直接与其他 Java 类进行协同和互通。当你有空闲时间时,可以将 Java 类迁移,并检查生成的代码,根据需要进行手动更改。以我个人经验来看,60% 的转换代码都是可以直接使用的,对于没有复杂功能的简单类而言这个比例会更高。我发现这是一个非常安全的场景,可以作为第一步来开始。

2.- 迁移已有代码

你已经开始编写了一些 Kotlin 代码。你了解了一些关于语言的基础。现在你已经准备好将 Kotlin 用于生产环境了!

当你要第一次开始在生产环境中使用时,从低耦合的类(DTO 和数据类)开始是非常高效的。这些类的影响很小,可以在非常短的时间内轻松的重构。这是了解数据类并大幅减少你的代码量的最佳时机。

这是你希望发起的 PR。

在这之后,开始迁移单一类。可能是类似 LanguageHelper 或 Utils 这样的类。虽然它们在很多地方被调用,但这种类一般只提供一些影响和依赖关系很有限的功能。

在某个时间节点,你会感觉解决架构中那些更加庞大和核心的类已经足够舒适了。不要害怕。请特别注意可为空(nullability),这是 Kotlin 中最为重要的特性之一。如果你已经进行了很多年的 Java 编程的话,它需要你用一种新的思维方式。但请相信我,新的编程范式最终会在你的头脑中形成。

记住:你不需要强制迁移整个代码库。Kotlin 和 Java 可以无缝交互,现在你并不需要让代码库 100% 由 Kotlin 组成。当你感觉到足够舒适的时候再去做它。

3.- 尽情的使用 Kotlin

到这个阶段你一定可以开始用 Kotlin 编写所有的新代码了。把这当成过去的事,不要总是回看。当你开始用纯 Kotlin 编写第一个功能时,除了在上面提到过的可为空(nullability),你还需要对默认参数多加注意。更多的考虑扩展功能,而不是继承。发起拉取请求(Pull Request)和代码审查,和你的同事讨论如何能够进一步完善。

最后的建议,享受吧!

用于学习 Kotlin 的资源

下面所列的是我曾经尝试过并且可以推荐的学习 Kotlin 的资源链接。我特别喜欢书籍,尽管有些人讨厌它们。我发现把它们大声读出来是很重要的,同时在电脑上进行编写和练习的话对于知识的沉淀更有帮助。

  1. Kotlin Slack: 许多 JetBrains 的人和 Kotlin 狂热者会聚集在这里。
  2. Kotlin Weekly: 我管理的一个每周选取 Kotlin 相关资讯发布的邮件列表。
  3. Kotlin Koans: 一系列可以训练和强化你的 Kotlin 技能的在线练习。
  4. Kotlin in Action: 来自 JetBrains 的一些 Kotlin 工作者的书。
  5. Kotlin for Android developers: 一本重点在如何使用 Kotlin 做 Android 开发的书。
  6. Resources to Learn Kotlin: Google 提供的更多学习 Kotlin 的资源。

我在我的 Twitter 账户上分享关于软件工程和生活的一些观点。如果你喜欢这篇文章或它真的对你有所帮助,非常乐意你能够分享、点赞或回复。这是业余作者的最大动力。





原文发布时间为:2017年7月13日

本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。
目录
相关文章
|
1天前
|
安全 Java
Java 面向对象之旅:在封装的港湾中,找到代码的安宁。
【6月更文挑战第15天】封装是Java面向对象的核心,它保护了类的内部数据,如`Book`和`Student`类中的属性。通过设定私有成员和公共方法,代码更有序,防止直接访问导致的混乱。封装提供了一种控制数据交互的方式,确保安全,如`setGpa()`方法验证输入。这使得代码结构清晰,如同港湾中的船只,井然有序,赋予编程过程美感和安全感。在面向对象的旅程中,封装是我们的庇护所,助力我们构建更美好的程序世界。
|
1天前
|
Java 数据安全/隐私保护
Java面向对象编程:为何“深藏不露”是最佳策略?
【6月更文挑战第15天】Java的封装是面向对象的核心,隐藏对象细节,只暴露有限接口。`Car`类展示了封装概念,品牌、型号和速度为私有,通过`accelerate`、`brake`等方法控制交互,确保数据安全和代码可维护性。同样,`Order`类封装了商品列表和总价,仅允许通过方法添加商品和获取信息。封装增强程序稳定性,易维护性和扩展性,是良好编程实践的基础。
|
1天前
|
Java 开发者
Java 面向对象编程实战:从类定义到对象应用,让你成为高手!
【6月更文挑战第15天】在Java中,掌握面向对象编程至关重要。通过创建`Book`类,展示了属性如`title`和`author`,以及构造方法和getter方法。实例化对象如`book1`和`book2`,并访问其属性。进一步扩展类,添加`pages`和`calculateReadingTime`方法,显示了类的可扩展性。在更大规模的项目中,如电商系统,可以定义`Product`、`User`和`Order`类,利用对象表示实体和它们的交互。实践是精通Java OOP的关键,不断学习和应用以提升技能。
|
1天前
|
算法 Java
Java关键字与保留字:如何正确使用,让你的代码“飞”起来!
【6月更文挑战第15天】Java编程中,关键字如"class"、"int"用于特定语法,保留字可能未来成为关键字。理解其含义和用法至关重要,避免用作标识符以防止未来冲突。正确使用如"for"控制循环,优化代码能提升效率,使程序运行更流畅。避免保留字,如"goto"、"const",查阅文档确保合规性。通过代码优化,让程序效率更高,代码飞行在技术的云端。
|
2天前
|
Java 编译器 程序员
【实战攻略】Java高手教你如何灵活运用if-else和switch,提升代码效率!
【6月更文挑战第14天】本文探讨了Java中if-else和switch语句的巧妙运用,通过示例展示了如何提升代码效率和可读性。通过使用Map重构if-else结构,使代码更简洁易维护;利用switch处理枚举类型,实现清晰的代码结构。在性能方面,switch在选项少时占优,而现代JIT编译器优化后的if-else适用于大规模字符串比较。理解并灵活运用这两种控制结构,能助你在Java编程中写出高效、易读的代码。
|
2天前
|
算法 Java 程序员
【程序员必看!】掌握这招if-else,你的Java代码将瞬间高大上!
【6月更文挑战第14天】本文介绍了if-else语句在程序设计中的重要性,通过示例展示其基本语法和复杂用法,如嵌套和else-if链。强调了避免过度嵌套、逻辑运算符的使用、保持一致性及添加注释等提升代码质量的技巧。学习并实践这些技巧,将使你的Java代码更优雅、高效,助你成为编程艺术家。
|
2天前
|
JSON IDE Java
Java反射详解:核心概念、使用方法与实际应用
Java反射详解:核心概念、使用方法与实际应用
8 2
|
2天前
|
Java 视频直播 数据库连接
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
9 2
|
2天前
|
存储 安全 Java
全面详解Java并发编程:从基础到高级应用
全面详解Java并发编程:从基础到高级应用
9 1
|
SQL 存储 Java
Java 应用与数据库的关系| 学习笔记
快速学习 Java 应用与数据库的关系。
175 0
Java 应用与数据库的关系| 学习笔记