写点什么

不仅仅是 Android 开发,谷歌告诉你选用 Kotlin 的五大理由

Christina Cardoza

  • 2019-06-12
  • 本文字数:3735 字

    阅读完需:约 12 分钟

不仅仅是Android开发,谷歌告诉你选用Kotlin的五大理由

在软件开发领域,每年都会涌现新的编程语言,但在过去的几年里,它们很少像 JetBrains 的 Kotlin 那样得到开发人员的重视。


Kotlin 是一种通用的、静态类型的编程语言,专为 JVM、Android、浏览器和本地解决方案而设计。它由 JetBrains 的语言设计师 Andrey Breslav 创建,2011 年由 JetBrains 正式发布。


如今,Kotlin 已经成为 Stack Overflow 上最受欢迎的语言之一,GitHub 上增长最快的编程语言之一,也是 Android 应用程序开发的首选语言。Kotlin 还因其跨平台和工具的崛起,在今年的 Thoughtworks 的技术雷达(Technology Radar)上亮相。


ThoughtWorks 首席技术官 Rebecca Parsons 表示,“那些尚未了解 Kotlin 的开发人员最好看看它能够做些什么。Kotlin 绝对是一种真正优秀的编程语言,具有扎实的特性和不断发展的生态系统。”


但是,在如此短的时间里,Kotlin 为何以及如何吸引开发人员这么多的兴趣呢?据 Thoughworks 技术主管 Fausto de la Torre 称,首先,Kotlin 是开源的,这就在大多数软件开发社区引起了共鸣。其次,Kotlin 还得到了业界顶尖技术巨头之一的支持:Google 在 2017 年的 Google I/O 大会上宣布支持这种编程语言。但是,甚至在 Google 宣布这一决定之前,就已经有许多开发人员将他们的开发工作转移到 Kotlin 了。


据 Google Android 的首席宣讲师 Chet Haase 说,Kotlin 打破了太多传统编程语言已被接受的模式。“任何事物都有可能造成尾大不掉的局面。”他说,“几年后,那些编程语言的提供者不希望完全改变现状,在编程语言中采用新的范式,强加给尚未做好准备的开发人员。”这也是 Google 在考虑采用 Kotlin 时主要关心的问题。“我们(并不)希望让 Android 开发人员感到震惊,让他们通过引入一些新概念来改变一切。”Haase 解释道。


Kotlin 采用了一种不同的方法,因为它完全可与 Java 互操作,允许 Kotlin 开发人员利用 Java 现有的库和框架生态系统。

Kotlin 与其他语言的比较

不过,ThoughtWorks 的 Fausto de la Torre 解释说,这种互操作性,对 Kotlin 来说可能是一种折衷。因为大多数采用 Kotlin 的开发人员都是 Java 开发人员,他们倾向于以 Java 风格编写 Kotlin 代码,但是在使用 Kotlin 时,有一些 Java 的行为、关键字和功能并不能很好地进行转换。“Kotlin 可以使用 Java 的整个生态系统,这是它所拥有的最强大的东西之一,但试图以同样的方式使用它,却是一项挑战。”他说,“你不能像你想象的那样来直截了当地使用它。”


而 Google 的 Android 产品管理总监 Stephanie Cuthbertson 则认为,Java 不再是最先进的编程语言了。大约有一半的 Android 开发社区正在使用 Kotlin,因为它能提供更多的现代特性。当你观察 Android 生态系统中的其他语言时,就会发现,C++ 和 Java 代表了特定时间内的某种技术水平。例如,C++ 代表数据结构和算法,而 Java 代表面向对象的语言,引入了诸如自动内存管理之类的东西;但是,Kotlin 则代表了一种更为现代的工作方式,Cuthbertson 如此解释。“开发人员告诉我们,他们喜欢 Kotlin 的所有现代习语。”她说。其中的一些例子包括:协程(coroutines)和为空性(nullability)。协程引入了一种新的方法来编写异步和非阻塞代码。Kotlin 还支持显式地声明 null,并确保开发人员不会遇到可能导致质量问题的空引用异常。


Cuthbertson 还认为,与其他语言相比,这种语言的发展速度更快,因为 Kotlin 语言并不是由委员会驱动的,而是由 Kotlin 基金会管理的,语言设计本身就是由编程语言设计大师 Breslav 完成的。Breslav 一直负责社区的一个流程,在这个流程中,他从其他开发人员那里获得了大量的意见,但他是唯一负责这一流程的人。Cuthbertson 说:“这意味着语言正在以一种与之相一致的方式迅速发展。Kotlin 语言是特意设计的,因此我们可以快速进化,但进化的方式要保护语言的纯洁性,同时以一种真正健康的方式接受社区的意见。”


此外,Android 的 Haase 解释说,Kotlin 的优势在于,它是由 IDE 公司 JetBrains 设计和开发的。“语言的核心特性以及新特性紧密集成到开发人员使用的开发环境中。虽然其他语言的 IDE 都很擅长使用这种特定语言进行开发,但语言本身是独立于 IDE 的。”他解释说,IntelliJ IDEA 是 Google 的 IDEAndroid Studio 的底层平台。


Thoughtworks 的 Fausto de la Torre 发现他的团队被 Kotlin 所吸引,因为它提高了开发人员的工作效率,并提供了比其他语言更好的开发体验。他解释说,Kotlin 有能力实现与其他语言相同的功能,但采用的是更为现代的方式,以更少的代码行来实现。


Cuthbertson 说:“一旦你掌握了编写 Kotlin 代码的窍门,你就可以编写更少的代码。代码越少,就越容易维护。由于诸如为空性之类的原因,你可以拥有更高质量的代码。而且因为有了现代习语,它变得有趣多了。”


Fausto de la Torre 补充说,Kotlin 社区目前还没有其他语言那般强大。“虽然它还在继续增长,但还不够成熟,仍然有一些差距需要填补。”他希望看到更多的测试框架和持续交付框架的工作。Google 目前正致力于投资和发展社区,并提供培训,帮助开发人员了解如何将 Kotlin 集成到他们的代码和解决方案中。“我们不仅认为这样做对我们的开发人员来说更好,而且我们还认为,这种做法对我们来说,也更好。”Haase 解释说。Google 目前正在其 Android Jetpack 和其他库中使用 Kotlin 编写。

Kotlin 不仅仅用于 Android 开发

目前,Kotlin 因其在 Android 应用程序开发领域的崛起而闻名,尽管 Google 仍在大力投资其他语言,但它也在推动 Kotlin 的发展。“如果你正在进行一个新项目,我们建议你从 Kotlin 开始。我们在 Android 操作系统开始采用了‘Kotlin 优先’的方法。”Android 的 Cuthbertson 说道。


但 ThoughtWorks 的 Fausto de la Torre 认为,这种语言显示出了其超越移动开发的价值。


ThoughtWorks 目前看到的情况是,团队使用 Ktor 构建微服务并将软件部署到生产环境中,Ktor 是一个使用 Kotlin 构建一步服务器和客户端的框架。MockK 是另一个用于模拟和测试 Kotlin 应用程序的 Kotlin 解决方案。“作为一个本地库,它帮助我们的团队编写干净简洁的代码来测试 Kotlin 应用程序,而不是使用像 Mockito 或 PowerMock 等不方便的包装器。”ThoughtWorks 在他们的技术雷达中写道。此外,ThoughtWorks 在 Kotlin 使用 Detekt 进行静态代码分析,在 Kotlin 中使用 http4k 来服务和使用 HTTP 服务。


Kotlin 团队还致力于通过 Kotlin/Native 将 Kotlin 语言带到移动应用程序开发之外的领域,这是一种无需运行虚拟机即可将 Kotlin 代码编译到本地库的解决方案。“Kotlin/Native 主要是为那些不需要或不可能使用虚拟机的平台(如嵌入式设备或 iOS)设计的。它解决了开发人员需要开发一个无需额外运行时或虚拟机的独立程序的问题。”JetBrains 在网站上如此写道。Kotlin/Native 目前支持 iOS、MacOS、Android、Windows、Linux 和 WebAssembly。


Google 还试图通过采用 Kotlin 进行云开发,将 Kotlin 引入 Android 开发之外的领域。


JetBrains 最近发布的一份 Kotlin Consensus 报告中,该公司发现,39% 的受访者使用 Kotlin 作为他们的主要语言,46% 的受访者将 Kotlin 用于服务器端生产代码,10% 的受访者将其用于数据科学。该报告是基于 Kotlin 用户的 4000 多份回复生成的。“如今,逾 200 万人在各种平台上使用 Kotlin,用于开发所有可能类型的软件。有超过 250 名的贡献者帮助推动发展,也在帮助生态系统向前发展。我们对社区的奉献精神和辛勤工作感到非常高兴。他们为 Kotlin 学习资料做出了巨大的贡献并传播了 Kotlin 的知识。”Kotlin 团队在一篇博文如此写道。

Google 采用 Kotlin 的五大理由

对开发人员来说,在现有的和已建立的平台上采用一种新的编程语言可能会让他们感到吃惊,因为它会在现有的应用程序、库、代码、新语言和新 API 之间形成一个脱节的环境。


Android 首席宣讲师 Chet Haase 说:“平台是否应采用另一种语言,一直是一个考虑因素,由于震动效应,答案总是否定的。然而,当我们想开发人员提出 Kotlin 的想法时,他们非常感兴趣。”


Google 的 Android 产品管理总监 Stephanie Cuthbertson 表示,促使 Google 在 2017 年宣布支持 Kotlin 的主要驱动因素有五个。


1.“这是一种漂亮的编程语言,” Cuthbertson 称。因为它是一种现代编程语言,所以,他利用了开发人员已经熟悉的许多新的最佳实践。


2.Kotlin 完全可以与 Java 互操作,允许开发人员在不同语言之间来回调用。


3.成熟。当 Google 决定采用 Kotlin 时,它已经诞生五年,并且已经达到了 1.0 的稳定性。


4.IDE 支持。Kotlin 是由 JetBrains 的 IntelliJ IDEA(Android Studio 的底层平台)的创建者创建,因此,它为 IDE 和语言提供了增强的支持。


5.社区。Cuthbertson 说,“我们将 Kotlin 应用到了 Android 上,是因为社区真的非常需要它。”事实上,Cuthbertson 解释道,就在 Google 宣布采用 Kotlin 之前不久,社区就曾给 Android 写了一封公开信,要求团队采用 Kotlin。


Cuthbertson 说:“Kotlin 并不仅仅是在发展,人们真的很喜欢它,正是因为出了这一系列的事情,让我们不得不打破平衡,并说:‘是时候向前迈进了。’”


原文链接:


https://sdtimes.com/softwaredev/the-rise-of-kotlin/


2019-06-12 14:3211287
用户头像

发布了 375 篇内容, 共 186.6 次阅读, 收获喜欢 945 次。

关注

评论

发布
暂无评论
发现更多内容

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(1),出队 - 摊还复杂度 O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

架构师课作业 - 第十三周

Tulane

从外卖员到拼多多30K+程序员,我付出了三年的青春

小Q

Java 学习 程序员 架构 面试

oeasy教您玩转linux 010211 牛说 cowsay

o

[翻译]Scalable Go Scheduler Design Doc[Go可扩展调度设计文档]

卓丁

golang scheduler Go scheduler Go 语言

Dubbo-go应用维度注册模型

apache/dubbo-go

dubbo dubbo-go dubbogo

一点 Go Web 编程实践经验

Garfield

Go web Go 语言

记一种spring框架的想当然但错误的用法

小明同学

源码分析 最佳实践 Spring Framework bug

.NET委托,事件和Lambda表达式

AI代笔

TOGAF认证课由2天变化为5天的思考

周金根

企业架构 TOGAF

一文解开java中字符串编码的小秘密

程序那些事

java安全编码 java编码指南 UTF编码

基于Goc的Golang代码VSCode实时染色方案

大卡尔

测试覆盖率 精准测试 Go 语言

架构师训练营第十四周

Melo

不要以为Bug写的好就是好程序员,其实这只占不到15%

小Q

Java 学习 程序员 架构 面试

甲方日常 13

句子

工作 随笔杂谈 日常

阿里培训官给新入职程序员的25条建议

Java架构师迁哥

藏在Java数组的背后,你可能忽略的知识点

Java架构师迁哥

业务架构学习内容有哪些?

周金根

BIZBOK 业务架构

这篇文章,把中国科技的真实底子讲透了

CECBC

中国 科技 产业竞争

【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!

冰河

多线程 高并发 秒杀 电商超卖 签约计划第二季

澳门金沙玩赢了钱提现不了异常注单未更新有什么办法处理?

丛林里的余光

异常检测 澳门金沙 提现不了

面试必问亿级流量优化策略之JVM调优,文档视频面试,还不收藏

小Q

Java 程序员 架构 JVM jvm调优

宅家三个月玩转算法,再战字节跳动,字节跳动面试官朝我比了个“ok”

编程 字节跳动 面试 算法

区块链技术发展的十大趋势

CECBC

区块链 金融 安全问题

从新浪数字化转型,窥见互联网的“懂行”新十年

脑极体

大数据任务调度 - 有向无环图(DAG)之拓扑排序

代立冬

大数据 数据结构 DAG 拓扑排序 Apache DolphinScheduler

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(n), 出队 - O(1),JavaScript,详细注释

Lee Chen

大前端

区块链赋能市场监管 浙江上线“黑科技”清除取证固证难题

CECBC

区块链 市场监管 取证难题

央行数研所推出贸易金融区块链平台

CECBC

区块链 金融

朱嘉明:全球科技革命正在逼近“奇点”,区块链影响未来人类社会的走向

CECBC

人工智能 科技 科技革命

JavaScript引擎的事件循环机制是怎样工作的?

Walker

Java 大前端 运行时栈帧 事件循环

不仅仅是Android开发,谷歌告诉你选用Kotlin的五大理由_编程语言_InfoQ精选文章