写点什么

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

Christina Cardoza

  • 2019 年 6 月 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 年 6 月 12 日 14:3210553
用户头像

发布了 348 篇内容, 共 136.5 次阅读, 收获喜欢 884 次。

关注

评论

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

【Flutter 专题】109 图解自定义 ACERadio 单选框

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

你愿意被管理么?

escray

学习 极客时间 朱赟的技术管理课 6月日更

【布道API】浅谈API设计风格

devpoint

Rest API 6月日更

读深入ES6记[二]

Daniel

ES6 6月日更

5分钟速读之Rust权威指南(十九)

码生笔谈

rust 生命周期

Python——输入输出:加减乘除四则运算的程序

在即

6月日更

当人工智能遇上视频直播——基于Agora Web SDK实现目标识别

dajyaretakuya

深度学习 音视频 WebRTC 声网 TensorFlow.js

Locust完成gRPC协议的性能测试

陈磊@Criss

公司:离职就是一场危机管理

石云升

创业 职场经验 6月日更

异构内存及其在机器学习系统的应用与优化

白玉兰开源

人工智能 机器学习 解决方案 第四范式 傲腾

浅谈Java中的TCP超时

Hoswey_洪树伟

Java、

Mybatis 二级缓存简单示例

Java mybatis

【Vue2.x 源码学习】第八篇 - 数组的深层劫持

Brave

源码 vue2 6月日更

做通才还是专才,你会怎么选?

架构精进之路

认知提升 6月日更

Packer 自动化镜像 Windows 安装过程

HoneyMoose

Kubernetes 的自动伸缩你用对了吗?

张晓辉

Kubernetes k8s最佳实践

阿里云边缘容器服务、申通 IoT 云边端架构入选 2021 云边协同发展阶段性领先成果

阿里巴巴云原生

云原生

Kubernetes手记(5)- 配置清单使用

雪雷

k8s 6月日更

高性能 JavaScriptの七 -- 编程实践小技巧

空城机

JavaScript 大前端 6月日更

递归全排列问题(两种方法 Java实现)

若尘

数据结构 递归 6月日更

操作系统内核是什么?Linux内核又是什么?读完这篇文章,我终于知道了

奔着腾讯去

c++ 操作系统 内存管理 Linux内核 进程管理

缓存穿透、缓存雪崩、缓存击穿问题与优化方案

Skysper

【21-1】21 连更第一篇

耳东@Erdong

6月日更

spring-beans 注册 Beans(四)BeanDefinition

梦倚栏杆

这些书都学完,绝对是编程界的大佬

看山

Java 程序员 6月日更

SpringBootApplication注解

梦倚栏杆

Python——字符串转换与处理

在即

6月日更

大道看“虚实”,DOM的虚实并进

法医

Vue 大前端 6月日更

密码学系列之:生日攻击

程序那些事

加密解密 密码学 程序那些事

内嵌双向链表的设计与实现

实力程序员

云原生推动全云开发与实践

阿里巴巴云原生

云原生

ShadowRealm 与微前端沙箱

ShadowRealm 与微前端沙箱

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