Kotlin灾难如何像闪电一样吞噬您的Java应用程序?

Øriginally published on Hackernoon.

I hear what you are saying. There is that buzz around Android actively adopting Kotlin as a primary programming language. And trends don’t look good either.

Things on a web-development front are not by a bit better. Most popular web-framework in Java supports more and more idiomatic Kotlin as we speak by providing suitable APIs.

您可以感觉到他们正在为未来下注。

看来这个未来比您想象的要近。

现在你在想。 我也应该下注吗? 还是仅仅是一些炒作会在一年后消失?

那种内心深处充满争议的感觉。 只是让你担心。

您不确定并担心,如果您不做任何事情,那么对Kotlin感到兴奋的新员工会将您的代码库转换为Kotlin,结果将使您的工作效率降低。

那使您担心您的工作位置。

相反,您对以前的编程语言尝试替代Java感到失望。 您不愿信任新的尝试。 一种新语言没有机会进入大多数传统代码库,还是存在?

也许,您对科技巨头(例如Google和Spring Team)为何下注于Kotlin感到好奇。

可能是您刚接触代码库,并且仍在学习一些以前从未使用过的新技术吗? 您的团队中很少有Kotlin爱好者,他们已经开始将Java代码转换为Kotlin代码?

所说的转换率令人震惊吗?

那会让你感到困惑和愤怒。 您已经在板上学习了很多活动部件。 那只会增加更多。

如果您不花时间学习Kotlin,则会担心您必须转移到另一个仍使用Java的项目中。 目前。

如果您确实学习Kotlin,您会感到恐惧,那会浪费时间,因为它不会像每个人所承诺的那样起飞。

我知道,对吧?

How Can That New Team Member Convert The Whole Code Base to Kotlin in a Few Months?

那么,一个团队成员能否对您的旧代码库进行如此大的改变?

我的意思是,那是巨大的! 一个人无法用新语言将其全部转换。 因此,我始终可以保持高效率,因为大多数代码将使用Java,是吗?

错误!

为了让您了解Kotlin可以多么快地使用您的旧版Java应用程序,我将附加这张图片。 它完美地描述了我到目前为止所看到的:


“How quickly Kotlin consumes Java applications.” (source: https://www.pexels.com/photo/blue-clouds-color-danger-268774/)

Kotlin is the programming language built by JetBrains. They have quite a vast Java code base, as well. They made it their mission to create a language that they can use today in their code base. Not just for the new features.

那么如何将Java文件转换为Kotlin?

可能您用新语言再次写了同样的东西。 然后使所有测试通过。 那是非常耗时的。 如果没有充分的理由,您的项目经理绝不会允许此类工作。 对?

不。

一个热键。

你没听错我的话。 只需按下IntelliJ键,即可将Java文件转换为Kotlin文件。 在99%的情况下,所有测试仍将通过。

你知道什么更可怕吗?

同样适用于整个包装……

让我告诉你一个故事。

我参加了一个有Kotlin爱好者的项目。 他们说服其他团队成员“试用” Kotlin以获得一个功能。

该项目已经两年半了。 一个项目的规模足以容纳多个Gradle模块,并开始提取一些独立的服务。

在两个月内,团队中没有人再编写任何Java。 任何需要更改以实现用户故事的Java文件都可以立即转换为Kotlin。

必须指出的是,在这两个月中,团队的速度并没有下降,因为不需要花费很多时间和精力进行转换。 特别是对于Kotlin爱好者。 他们一直在进行此类转换。

让我告诉你另一个故事。

这次是一次不成功的向Kotlin的转换。 但是,有一个陷阱。

几名Kotlin爱好者同时加入了该团队。 由于他们在将Java转换为Kotlin方面已经具有相当丰富的经验,因此他们才开始这样做。

另一半团队成员仍在学习技术堆栈,因为他们在该代码基础上还很新。 Kotlin只是添加了其他活动部件。

他们抵制了科特林的改变。 团队同意不继续进行转换,因为这会减慢这些团队成员对现有技术的了解。

但是这里是要抓住的地方。

经过一对一的交谈,这些团队成员喜欢Kotlin。 一旦对技术栈感到更满意,他们就可以继续进行转换。

我对大约半年后他们也将停止编写任何Java充满信心。

让我告诉你今天的最后一个故事。

这是一个长期的项目。 非常大而复杂。 我认为它是具有十多个宏服务(请注意“宏” —“不是”“微”)的遗留Java代码库。

一天,两名团队成员请一位Kotlin爱好者来帮助他们试用Kotlin。 由于互联网上的所有嗡嗡声,他们感到好奇。 并且因为那个Kotlin狂热者散发出了对Kotlin的热情。

您可以猜测发生了什么。

在五个月内,没有人再为该团队编写Java代码了。 相同的故事。

您知道这种转换更可怕的是什么? 转换为Kotlin并开始使用Kotlin专有功能后,就很难将这些代码转换回Java。

过去有足够的这些可能的Java替代品。 他们都没有兑现这一诺言。

那么Kotlin有何不同?

How is This Java Replacement Attempt Different From Previous?

几句话。

100%的Java互操作性。

您可以在同一目录中轻松混合Kotlin和Java文件。

Java可以导入Kotlin类并像没有使用任何奇怪语法或技巧的Java类一样使用它们。 Kotlin也是如此。 Kotlin代码可以导入任何Java类并像使用Kotlin类一样定期使用它们。

没有像这样的怪异事物object.field_ $ eq(值)设置一个值。

要从Kotlin调用Java setter,您将使用Kotlin语法:object。field =值。 要从Java调用Kotlin设置器,您将只使用普通的设置器方法:object。setField(value)。

Kotlin代码可以实现Java接口,而Java代码可以实现Kotlin接口。

Kotlin具有这种互操作性,这是该语言的首要功能。 这是因为JetBrains团队希望立即在其庞大的Java代码库上使用Kotlin。 而且没有任何痛苦。

这样一来,您只能将单个类从Java转换为Kotlin,而不会触发巨大的级联更改。 有时,您仍然希望转换一些相关文件,但不必这样做。

Kotlin更有可能兑现替代Java承诺的另一个原因是构建工具。

Kotlin不需要任何独特的构建工具。 一个Maven或Gradle插件就足够了。

而且,Kotlin的制造时间非常快。 如果启用了增量编译,它甚至可以比Java更快!

好的。 如您所见,在与Kotlin进行权衡的规模上并没有太多负面点。

那么,该量表的积极方面是什么? 当您停止编写Java并开始编写Kotlin时,您会得到什么?

那么,为什么像Android和Spring这样的科技巨头却将赌注押在Kotlin上呢?

So Why Tech Giants Are Placing Their Bet on Kotlin?

Kotlin语言简洁明了。 简洁明了,又不损失Java的可读性。 Kotlin会删除您在常规Java或Android应用程序中看到的所有样板文件。

是否曾经想过可以直接在集合对象上使用流API? Kotlin有。 它的标准库扩展了许多具有附加功能的标准Java类。

这大大减少了样板。 在必须创建五个不同的类来读取流的地方,Kotlin允许您按照自己的期望进行操作。 阅读该流。

Kotlin比Java更安全。 它提高了类型系统的可空性。 这意味着编译器可以静态分析您的代码,并且如果您在某处可能会出现空指针异常-Kotlin代码将无法编译。

而且这些可空性检查甚至不像其他语言那样令人讨厌。

这要归功于聪明的演员。 让我给你看一个例子:


Compile error because quiz variable can be null

因为测验Storage。load(测验Id)退货测验?(可为空测验),编译器抱怨您无法直接在上调用方法测验可变的,因为它可以是空值。

因此,为了使编译器满意,您需要添加一个空检查:


By adding null-check we are fixing the compile error and making quiz “smart-casted” to non-nullable

如你看到的,quiz.moveToNextQuestion()以“特殊”方式突出显示。 如果将鼠标悬停在该变量上,它将告诉您已将其智能广播到测验类型。

因为编译器现在知道,所以测验变量不能是空值这一点。

在具有可为空类型的不同语言中,通常需要将可为空的值包装为不可为空。 即使您进行了空检查!

这种展开操作是不安全的。 因此,如果其他程序员(包括您未来的自我)删除了您的空检查,则不会被警告。

聪明的演员很酷。 只要有人删除了null检查,就会出现编译错误。

还有一种更简洁的方法可以编写相同的内容—elvis运算符?::


Most null-checks can be eliminated using elvis operator to further simplify the code

顺便说一下,这些示例来自我的终极教程:Kotlin入门。 这是一个由三部分组成的教程,以电子书的形式提供,您总共可以学习260页(以后还会更多)的动手内容。

By this point, if you are interested in learning Kotlin, download that Ultimate Kotlin Tutorial as a PDF here.

不仅您将获得动手实践的内容,还将从中学习如何在Kotlin中编程。 当您遇到困难时,您将可以问我任何问题,我会为您提供帮助。

无论如何。 Kotlin的好处还有什么?

显然,如果您花足够的时间编写Kotlin,那么您还将开始编写更具可读性和更强大的Java代码。

那是一个有趣的副作用,不是吗?

我的几个朋友甚至告诉我,他们宁愿聘请Kotlin开发人员而不是Java开发人员来从事全Java的项目,而该项目根本没有Kotlin。

Moreover, Kotlin took a lot of principles from “Effective Java” book and converted them to basic language concepts. So by just writing Kotlin for some time, you are going to learn how to write a better Java code. Not so bad, right?

那么工具呢? 使用Kotlin容易吗? 还是我必须放弃我的IDE的重构和智能功能才能在Kotlin中进行编码?

我是否必须再次像在文本编辑器中一样编写它?

没有。

Kotlin由JetBrains制造。 它是制造IntelliJ IDEA的同一家公司。 他们尽最大努力确保在IntelliJ中使用Kotlin时会感到宾至如归。

当前的支持是巨大的。 所有必要的重构都已经到位。

而且,正如我们所说的,它们添加的越来越多。

那么现在是学习Kotlin的好时机吗?

Is it a Good Idea For You to Learn Kotlin Right Now?

当然,您需要决定。

如果您要问我…穿上鞋子,我会去的。 这就是为什么。

即使Kotlin没有兑现在大多数旧代码库(甚至是新代码库)中替换Java的承诺,我也知道我已经成为一名更好的Java程序员。

只有这样才值得。 需要更多吗?

我有你的

对于程序员而言,随时随地学习另一种语言总是值得的。 唯一的例外是,如果您只是刚刚起步。

因此,如果您对语言,技术堆栈和所有内容都感到满意,并且现在不学习任何其他编程语言,那么最好还是不要与Kotlin接触。

它将使事情成为现实,并使您摆脱当前的泡沫。 总是很好。

学习是一种技能。 因此,您学得越多,您就会成为更好,更有效的学习者。

也许,您认为您没有时间学习新技能,因为您拥有一份全职工作,家庭,业余爱好以及生活中的其他一切?

Then you should learn how to find the time to learn a new skill when you are working full-time.

If you think you are up to the challenge of upgrading yourself from Java developer to Kotlin developer, download the Ultimate Tutorial: Getting Started With Kotlin.

我衷心感谢您的阅读,并鼓励您尝试一下Kotlin。 无论如何,你没有什么可失去的。 您只能从中受益。

如果您想让我开心,则可以在社交网络,黑客新闻,Reddit等上与您的朋友分享。

Øriginally published on Hackernoon.

from: https://dev.to//waterlink/how-kotlin-calamity-devours-your-java-apps-like-lightning-8fd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值