kotlin ++ --_Kotlin-进行自然而无所畏惧的大规模过渡

kotlin ++ --

葡萄牙 马夫拉宫的18世纪图书馆

Java开发人员应该考虑Kotlin的原因有很多。 具有完整的Java互操作性,内置的Null安全性,精简的样板文件-用更少的代码做更多的事情-因为该语言确实很简洁,并且从工程师到工程师都有大量的更现代的功能,最终这些功能让开发人员在一天结束时感到高兴。 但是,语言细节将不会成为本文的主要重点,因为对此已经有很多论述和强调。 相反,我将谈谈我在将Kotlin投入生产中的亲身经历,并描述一些指导我前进的策略。

随着新的一年的到来,我们的解决方案已经开始逐渐消失为开发无效状态,我通常会保留一个方案:学习一项新技术并将其投入生产。

您可能已经知道了,我在说的是Kotlin。

从Java开发人员的角度来看,Kotlin是一个真正的游戏规则改变者。 虽然它通过减少大多数样板代码来使每个精干代码的开发人员感到满意,但其核心构建的Java的互操作性使其可以轻松地将其合并到新旧应用程序中,从而可以自由地重用所有喜爱的Java库和框架。

在Sky,我们依靠Java来提供大多数核心后端服务,但是我们不能真正说我们遵循一个特定的软件堆栈。 通常,不同的团队和项目可以自由选择哪种语言和框架最能解决他们要解决的问题。 我必须说我是代码所有权的忠实拥护者:“我们编写它,我们拥有它,如果它在一天结束时浮现在我们的脸上,那就在我们身上”; 责任增加; 技术发展; 取得的骄傲和成就; 更多的玩家,更少的棋子。 这些都是我们所有人都应该设想和追求的。 话虽如此,我也知道这种方法可能不适用于每个人,也不适合每个公司的开发过程。 通常来说,您的团队是否完全控制技术栈,很难进行更改,例如引入新的编程语言,其原因如下:

  • 难以回收内部知识
  • 陡峭的学习曲线使速度松动
  • 聘请专家很困难
  • 打破与现有生态系统的互操作性
  • 普遍的恐惧和不确定性

尽管在转移到全新的技术栈时上述情况是正确的,但从Java到Kotlin的迁移却并非如此。

从Java开发人员的角度来看,可以回收内部知识,因为Kotlin的学习曲线确实很平坦。 我个人在一天之内设法提高了Kotlin的速度,并在一周左右的时间内编写了更多惯用的代码。 Kotlin的灵感来自于许多熟悉的语言,例如Scala,Javascript或C#,它与Java的相似之处极大地提高了可读性并有利于平缓的学习曲线。 此外, 在多个平台上编译为JVM字节码,Javascript或什至在Native上编译,意味着每个人都可以使用他们已收藏的工具,IDE和SDK来快速开始在Kotlin中进行生产。

在解决迁移风险时,应始终牢记从长远来看维护代码有多容易,以及雇用专门从事新技术的工程师有多容易。 我的观点是,通过以健康的代码库以及他们认为有趣且富有成效的正确工具集来推动具有挑战性的项目,从而保持工程师的积极性是关键。 如果我们正在招聘Kotlin或任何其他新兴语言或堆栈,我们还会发送一条信息:我们不惧怕迎接新挑战,并且我们不愿意陷于遗留或过时的代码库。 让我们面对现实吧,当我们打算在这个竞争如此激烈的市场中聘请最优秀的人才时,我们并没有选择开发商,而是开发商在选择我们。 我们确实需要停一会儿,从技术和个人成长的角度,了解为什么我们如此有吸引力,以及我们作为一家公司的与众不同之处。 它不再只是薪水了。 特别是在Java生态系统方面,聘请Kotlin确实可以给我们带来影响,因为大多数开发人员都渴望尝试新技术,不仅在他们的附带项目上,而且在他们的工作环境中都珍视这种机会。

关于与现有生态系统的互操作性,作为一种JVM语言,Kotlin生成了可在现有Java基础结构上运行的字节码。 这对微服务,基于容器的应用程序,整体式或独立运行的应用程序有效。 在Java生态系统中,我们所有人都珍视的一件事是,各种可用的开源库和工具使我们的生活更轻松,从而使我们无法一遍又一遍地解决相同的问题。 我们都喜欢。 通过使用Kotlin,由于它与Java的互操作性,我们仍然可以从该生态系统中获利,从而可以重用我们花费大量时间和精力开发的库,最终由我们的雇主付款。

那么,从哪里开始呢?
从小开始。

在现有项目上开始使用Kotlin的方法有几种。 记住,推动您的技术需要获得信心的不仅是您,而且每个人都参与其中–是dev-ops团队,动态类型语言的爱好者, bash-shell脚本编写专家,技术娴熟的Phyton ninja ,是最近转换的CSharper以及Java4life恐龙……-是的,这需要一些时间才能令人信服,但是让所有人都在同一页面上至关重要,因此最好开始为办公室准备一些蛋糕。 如果您发现自己很难获得所有人的认可,那就做对的事情:不要拿圣经,每天早晨开始讲道; 也许首先讨论您在喝咖啡休息时间退出的功能; 增加价值,花一些个人时间并建立一些东西-无论如何,您已经在Kotlin的副项目上进行了尝试-并分享了自己的热情。 这最终将使您到达想要的位置。 记住,归根结底,团队的努力和凝聚力才是最重要的。

首先以尽可能少的破坏性方式迁移测试模块

Kotlin具有很高的表现力,并遵循“可读性优先”的方法,在测试过程中可能会非常有帮助。 只要用反引号括起来,可以用测试名称中的空格来代替使Java难以读取测试的驼峰式命名。

@Test
public void testHandlesExceptionOnDateTimeParsing() // Java
@Test
fun `Handles exceptions while parsing dates`() // Kotlin

像上面这样的小功能,可以使测试实现阶段更加有趣,并且是一个不错的起点,因为您将逐渐发现表达代码的新方法并提高速度。

首先在解决技术难题的同时重新实现小型功能或重构

另一个好的方法是从Kotlin中实现新的非核心功能开始,以利用与Java的互操作性。 Kotlin官方文档中广泛介绍了如何正确执行此操作的几个示例 ,因为该语言本身就是旨在以一种轻松的方式实现这种共存的语言。

您最喜欢的IDE也可以使您轻松

JetBrains Kotlin到Java转换器弹出窗口

JetBrains的家伙实现了一个方便的Java到Kotlin转换器,该转换器确实有效。

这些都是与语言功能建立良好联系的好主意,但是,老实说,只有将其投入生产并进行准确测量后,您才能获得真正的信心并建立动力。 为了避免午夜电话和没人喜欢的验尸会议上的尴尬沉默,在Sky,我们遵循无中断方法,从头开始编写新的非核心功能,例如度量标准和出版。 我们将新功能包装为一个简单的库,使我们能够将其插入不同的微服务中,并识别本质上不同的服务上的不同行为模式。 经过广泛的基准测试和负载测试,确保我们仍能控制第99个百分位数,我们开始在工程师之间收集良好的反馈和认可。 现在,我们已经自豪地发布了在Kotlin中100%构建的新微服务,每秒可接收数百个请求。

我们还能够坚持我们熟知并已经依赖的框架,以避免为学习曲线增加更多的内容。 这也使我们能够比较在完全Java与完全Kotlin之间构建的速度。 这是对通知重要的是发展,堆像春天Vert.xDropWizardRatpack等等,以及像静态代码analisys工具SonarQube已经准备好Kotlin。

最后的想法

更改用于提供宝贵的后端服务的核心语言永远不会轻易做出决定。 在骨干级向完全不同的生态系统过渡通常仅适用于与现有生态系统松散耦合的绿色田间项目。 通常,这意味着您将在接下来的十年中受当前选择的束缚,因此最好谨慎选择。 Kotlin的知名度一直很高,部分原因是Android的吸引力日益增强,而Kotlin容易将其误解为炒作时尚。 我个人认为,这不仅仅是炒作-从技术和管理的角度来看,这都是自然而然的过渡-好奇的读者在编写和运行Kotlin应用程序后会清楚地同意这一点。 另一方面,这并不意味着我们应该停止编写Java。 尽管多年来,社区在JVM的向后兼容性,性能和可靠性方面做出了巨大的贡献,但Java语言本身达到了与其他语言相比发展不佳的地步,主要是由于发行周期缓慢,而且我个人的看法是过度保守主义。 幸运的是,随着Java的发展,事物似乎正在发生变化。Java是我们已经学会掌握和喜爱的语言,它仍然在业界最常用的语言中占据着优势。

作为小吃,这里有2种酷炫的Kotlin功能供您选择:

扩展功能

扩展函数确实是用新功能扩展类的好方法,而无需创建从其继承的包装器类型。

上面的readText()片段加载了一个资源文件,读取了所有内容并将其转换为String。 简而言之,可以如下使用:

无符号类型

Kotlin 1.3为无符号整数引入了以下类型:

kotlin.UByte :无符号的8位整数,范围从0到255
kotlin.UShort :16位无符号整数,范围从0到65535
kotlin.UInt :一个无符号的32位整数,范围从0到2 ^ kotlin.UInt
kotlin.ULong :一个无符号的64位整数,范围从0到2 ^ kotlin.ULong

无符号类型支持其带符号对应的大多数操作。

____
给我反馈:如果这是一本好书,请鼓掌;)

翻译自: https://hackernoon.com/kotlin-making-a-natural-and-fearless-high-scale-transition-b7a12e51ebca

kotlin ++ --

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值