写点什么

JetBrains 发布 Kotlin 1.0

  • 2016-03-02
  • 本文字数:2092 字

    阅读完需:约 7 分钟

在 Beta 之后仅仅几个月,JetBrains 正式宣布 Kotlin 的第一个稳定版本,其基于 JVM 并兼容 Android 的新语言。制造商表示,Kotlin 打算作为一个“好工具”,目的是为了驱动设计决策向实用性和互操作性前进。Kotlin 希望解决 Java 中只能通过类库和外部工具来修复的许多问题,同时提供平滑和渐进的过渡机会。

在2010 年的初步设想中,JetBrains 决定创建Kotlin ,以此来提高开发他们自己的产品时(Kotlin 现在被使用在JetBrains 的产品中,比如IntelliJ IDEA)的生产效率。考虑到许多其他用户将不得不面对同样的问题,JetBrains 决定开源Kotlin ,并且鼓励参与和贡献。因为它基于Java 1.6,Kotlin 很快在Android 开发者中流行起来,为他们提供了获取一系列其他版本和语言所拥有的流行特性。事实上流行的证据就是新的Android 开发工具,比如 JRebel for Android ,包含了对 Kotlin 的支持。

虽然 Kotlin 在 Android 开发中超越 Java 的优势会在 Android 完成迁移到 OpenJDK 之后减弱,但是开发者能够在一些其他的领域获得益处。其中包括:

  • Getter/Setter 引用:Java 中写代码来访问属性,典型的操作是通过 IDE 辅助的代码生成、像 Project Lombok 这样的字节码操作,或者是简单的将内部属性公开(这违背了封装的原则)。在 Kotlin 中,数据类的创建默认为所有的属性提供了 getter 和 setter。
  • toString、hashCode、equals:Java 为这三个方法提供默认实现,但是这些很少有用处,这意味着开发者通常必须重写默认方法并创建他们自己的。很多情况下,所需要的实现是足够简单的,以便于通过一些类库,比如 Apache Commons Lang 和 Google Guava 来提供。Kotlin 的数据类基于类的字段为这些方法提供了一个默认实现,类似于大部分开发者所需要的,这意味着不需要去重写这些方法。此外,Kotlin 的“==”操作符不是比较引用,而是和 equals 方法一样。
  • 对象的部分构建:在很多时候,一个对象需要在只有部分参数被提供,同时其他参数保持默认值的情况下被构建。这通常通过建造者模式来完成,它创建一个建造者类和目标类来创建需要的对象。Kotlin 通过支持命名参数来解决这个问题。
  • 空值检查:对 Java 开发者来说,避免空值是一个普遍头疼的问题,通常通过 IDE 检查(检测值一直为空)、类里面的断言( Objects.requireNotNull() )、类似 @NotNull 或者 @NonNull 这样的注解的隐含验证、Google 的 Optional,或者之后的 Java 8 的 Optional 来解决。在 Kotlin 中,空值的概念已经被转移到语言自身,这意味着变量在编译时就知道它们自己是否为空:
复制代码
val x: String? = "Hi" // Declaring x as a nullable String
x.length // Does not compile, x could be null, null check needs to happen first
if (x != null) {
x.length // Compiles, Kotlin understands that x is not null by this point
}
val y: String = null // Does not compile, y is not declared as nullable
  • 字符串构建:在 Java 中,我们可以通过使用连接运算符(“a " + 变量 + " b”),String.format() 方法能提供更好的可读性(String.format(“a %s b”, 变量)),或者通过 StringBuilder/StringBuffer,如果性能是一个问题(new StringBuilder().append(“a “).append(variable).append(” b”).build())来构建字符串。Kotlin 支持很多 Ruby 和其他语言中的字符串插入的方法,意味着开发者能简单的输入“a ${变量} b”。
  • Java 8 环境之前的 Lambdas 表达式:Lambdas 表达式只在最新的 Java 版本中引入,虽然旧版本不再支持,它们仍然被广泛的使用。为了在之前的版本中使用Lambdas 表达式,用户需要使用一些工具,比如 Retrolambda 。但是 Kotlin 提供了 lambda 表达式支持,因为它基于 Java 6,它使得在旧环境中也能使用这个功能。

Kotlin 可以很容易的解决很多其他的日常问题。但是,尽管有很多好处,选用一种新语言会带来它自己的风险和挑战。一方面,在现有的项目中选用 Kotlin,可能会需要 Java 和 Kotlin 在一段时间内共存。JetBrains 试着让两者的互通性尽可能的透明来解决这个问题,同时提供一个Java-to-Kotlin 的转换工具。

另一方面,用户安全的投入到任何新工具中,都需要长期支持。JetBrains 已经通过分配大量的资源(超过20 个全职开发者)和承若通过社区贡献来进行标准化进程,来表明它对Kotlin 的承诺。JetBrains 也承诺Kotlin 的每个新版本都向后兼容。这些原则让人们想起了Java 本身的管理方式,其参考的平台是开源的(OpenJDK),标准化进程是社区领导的(JCP),并承诺每个新版本都向后兼容。

Kotlin 是否会在日益增长的 JVM 语言(迄今为止超过 50 种)中突出出来还有待观察;目前,GitHub 中已经有 200 万行 Kotlin 代码(不包括 JetBrains 项目), StackOverflow 中也有将近 700 个问题

查看英文原文: JetBrains Releases Kotlin 1.0


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

2016-03-02 18:004535

评论

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

2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day

TiDB 社区干货传送门

Java技术:SpringBoot实现邮件发送功能

天使不哭

Java email #开源 8月月更

论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题

隐语SecretFlow

密码学和算法 机器学习/深度学习

10个 Istio 流量管理 最常用的例子,你知道几个?

万猫学社

云原生 istio envoy Istio流量管理

Go-Excelize API源码阅读(五)—— Close()

Regan Yue

Go 开源 源码刨析 8月日更 8月月更

在“企业通讯录”的盲区,融云的边界与分寸

融云 RongCloud

企业 IM im开发

十步以内,用小程序快速生成App!

Geek_99967b

小程序

分贝通SAAS企业大数据体系建设经验分享

阿里云大数据AI技术

大数据

开源一夏 | Mysql开启ssl加密协议及Java客户端配置操作指南

六月的雨在InfoQ

MySQL 开源 SSL证书 SSL 连接 8月月更

SpringMVC(三、JDBCTemplate)

开源 springmvc 8月月更

跨端技术方案选什么好?

Geek_99967b

跨端

README_Albumentations

G_Meteor

winpe工具WEPE微PE工具箱

肖飞码字

windows 操作系统

【React源码系列】全网最详细的React异常捕获及处理机制

爱切图的木子老师

前端 React react源码 异常捕获

基于设计稿识别的可视化低代码系统实践

Shopee技术团队

前端 设计 低代码

ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》

York

云计算 DevOps 云原生 数字化转型 降本增效

5个 Istio 访问外部服务流量控制最常用的例子,你知道几个?

万猫学社

云原生 istio envoy Istio流量管理

2022Nginx实战教程,由浅入深

LoneWalker、

nginx

视频是主动学习吗?

FunTester

为什么数字钱包需要引入小程序生态

Speedoooo

小程序 第三方支付 小程序容器 移动钱包

分享 6 个 Vue3 开发必备的 VSCode 插件

Geek_z9ygea

vue.js 前端 vscode vuejs

小程序+自定义插件的关键性

Geek_99967b

小程序

图解VirtualBox安装CentOS 7

万猫学社

Centos 7 virtualbox

“车家互联”新态势,小程序实现物联网多场景互通

Speedoooo

小程序 智能家居 小程序容器 电动车

重要的不是成为海贼王,而是像路飞一样去冒险

沃德

“稚晖君”为2022昇腾AI创新大赛打call 期待广大开发者加入

极客天地

开源一夏 | 对于Angular表达式以及重要指令的研究心得【前端实战Angular框架】

恒山其若陋兮

开源 8月月更

开源一夏 | 基于若依架构的列表详情展示

六月的雨在InfoQ

bootstrap 开源 若依 8月月更

shell之变量详解,让你秒懂!

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

JetBrains 发布Kotlin 1.0_Java_Abraham Marín Pérez_InfoQ精选文章