[译] 将 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 Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
1天前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
20 5
|
1天前
|
Java
java代码和详细的代码应用
代码块分为局部、构造、静态和同步代码块。局部代码块控制变量生命周期,例如 `int a` 只在特定代码块内有效。构造代码块用于创建对象时执行附加功能,避免构造方法中代码重复。静态代码块随类加载执行一次,常用于初始化操作。同步代码块确保多线程环境下方法执行的原子性,通过 `synchronized` 关键字实现。
16 3
|
2天前
|
设计模式 算法 Java
【揭秘】如何巧妙运用Java模板方法模式,让你的代码优雅升级?
【8月更文挑战第30天】模板方法模式是一种行为型设计模式,它定义了算法的骨架并将某些步骤延迟到子类中,使子类能在不改变算法结构的情况下重定义特定步骤。此模式适用于具有共同结构但细节不同的场景,如角色升级系统。通过定义一个抽象类 `Character` 包含模板方法 `levelUp` 和抽象步骤方法,子类如 `Warrior` 和 `Mage` 可以实现具体逻辑。这种方式提供了良好的扩展性,确保算法结构不变,同时保持系统的稳定性和一致性,在数据处理和业务流程管理中广泛应用。
12 2
|
1天前
|
Java C# 容器
Java代码的第一行实战
这段代码展示了Java的基本结构,包括`package`(包)、`public`(访问修饰符)、`class`(类)、`static`(静态)、`void`(空)及`System.out.println()`(系统输出)。同时介绍了Java中的注释、数据类型(如`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`)、变量、常量、运算符、类型转换、赋值运算符、关系运算符与逻辑运算符等内容。通过生动的例子帮助理解各种概念。
11 2
|
2天前
|
Java 开发者 UED
“Java开发者必看:异步编程实战解析,掌握这些技巧,让你的代码跑得更快!
【8月更文挑战第30天】随着互联网技术的发展,系统性能和用户体验成为关注焦点。异步编程作为提高应用响应速度和吞吐量的技术,在Java中广泛采用。本文详细介绍了Java异步编程的概念与优势,并通过实战示例展示了如何利用Future、Callable及CompletableFuture在实际项目中实施异步编程,帮助开发者更好地理解和应用这一技术。
10 2
|
1天前
|
Java
编写规范JAVA代码
本文档制定了Java编程规范,旨在确保系统源程序的可读性和可维护性,适用于所有Java开发、测试及维护过程。规范包括命名规则(如Package、Class及其成员等)与样式规定,强调统一风格以提高协作效率,并列举了具体示例与注意事项,如避免单字符变量名及使用有意义的反义词组命名等。
12 1
|
1天前
|
Java 数据安全/隐私保护
Java代码的执行顺序和构造方法
构造方法是类的一种特殊方法,用于初始化新对象。在 Java 中,每个类默认都有一个与类名同名的构造方法,无需返回类型。构造方法不能用 static、final、synchronized、abstract 或 native 修饰。它可以重载,通过不同的参数列表实现多种初始化方式。构造方法在对象实例化时自动调用,若未显式声明,默认提供一个无参构造方法。构造代码块和静态代码块分别用于对象和类的初始化,按特定顺序执行。
14 0
|
1天前
|
Java 程序员 调度
Java中的多线程基础与实战应用
【8月更文挑战第30天】在Java的世界里,多线程是提升程序性能的利器,但也是新手开发者常碰壁的难点。本文旨在通过浅显易懂的语言和生动的比喻,带领读者走进Java多线程的大门。我们将从线程的基本概念出发,逐步深入到线程的创建、启动、管理以及同步机制,最后通过一个简易版的图书管理系统实例,展示如何在实际开发中灵活运用多线程技术。
|
Java 开发者 Kotlin
Java 已老,Kotlin 或将取而代之?存在吗?
近期小编看到这样一篇文章 小编个人觉得Java不会衰落的 你们觉得呢? 把你们的想法在在下面评论席上发表出来 小编会一个一个看的 Java已经成为历史。
1034 0
下一篇
云函数