硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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:004465

评论

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

YashanDB数据库的最佳维护实践与问题排查技巧

数据库砖家

YashanDB数据库的负载均衡策略详解

数据库砖家

MyEMS开源能源管理系统核心代码解读003(上)

开源能源管理系统

开源 代码 能源管理

YashanDB数据库的最佳配置设置:提高系统稳定性

数据库砖家

YashanDB数据库的负载均衡策略详解

数据库砖家

YashanDB数据库的监控与运维最佳实践

数据库砖家

YashanDB数据库的联合查询及使用场景

数据库砖家

YashanDB数据库的版本迭代历程及新功能亮点

数据库砖家

YashanDB数据库的监控与调优技巧

数据库砖家

YashanDB数据库的读写分离架构详解

数据库砖家

YashanDB数据库的负载均衡策略与实施方法

数据库砖家

YashanDB数据库的核心功能及应用场景详解

数据库砖家

YashanDB数据库的联合查询及使用场景

数据库砖家

App开发成本高居不下,如何“降本”突围?

Speedoooo

灰度发布 APP开发 热更新 小程序容器

YashanDB数据库的最佳维护实践与问题排查技巧

数据库砖家

CST热仿真CHT求解器--针式散热片+风扇

思茂信息

仿真 CST Studio Suite 热仿真

网站运营三阶段规划:网站分析从流量到转化全掌握

ClkLog

开源 埋点 sdk 用户行为分析 用户画像

YashanDB数据库的高可扩展性架构设计理念

数据库砖家

MyEMS开源能源管理系统核心代码解读003(下)

开源能源管理系统

开源 代码 能源管理

YashanDB数据库的读写分离策略及其性能提升

数据库砖家

YashanDB数据库的最佳实践及实施方案总结

数据库砖家

YashanDB数据库的监控与告警系统配置教程

数据库砖家

YashanDB数据库的字段类型与数据模型

数据库砖家

YashanDB数据库表关系设计与查询优化实操

数据库砖家

YashanDB数据库表设计与规范命名建议

数据库砖家

YashanDB数据库的负载均衡及分布式特性探讨

数据库砖家

YashanDB数据库的负载均衡实现方法

数据库砖家

YashanDB数据库的监控技术及性能评估方法

数据库砖家

MyEMS助力企业轻松实现ISO 50006标准

开源能源管理系统

开源 代码 能源管理

开源鸿蒙年中技术会议在东莞盛大召开,生态繁荣与技术突破共绘新蓝图

最新动态

YashanDB数据库的智能故障检测对策

数据库砖家

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