免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

评论

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

测试开发之前端篇-CSS层叠式样式表

禅道项目管理

CSS html

Alibaba内部“Java架构核心宝典”来袭,全新技术限时开源

Java 编程 程序员 架构 面试

乘着汽车智能化的浪潮,“汽车人”的职业方向选择(三)

SOA开发者

软件定义汽车 车载控制单元

为什么不推荐Python初学者直接看项目源码

Felix

Python 编程 开发 Programing 阅读代码

Shell:Lite OS在线调试工具知多少

华为云开发者联盟

Shell 操作系统 Lite OS 在线调试 命令函数

阿里巴巴发布“限量版”Java零基础宝典,万字Java技术类校招面试题汇总

Java 程序员 后端

对Python爬虫编写者充满诱惑的网站,《可爱图片网》,瞧人这网站名字起的

梦想橡皮擦

9月日更

Linux用户密码管理

在即

9月日更

一部好看过武侠小说的热血互联网史!

博文视点Broadview

mydumper备份工具介绍与使用

Simon

MySQL

CSS 轻松制作 SVG 动画

devpoint

css3 SVG 9月日更

千万级数据迁移与分表的技术方案-企业产品实战

谙忆

Java 后端 分库分表 引航计划

基于Tensorflow + Opencv 实现CNN自定义图像分类

华为云开发者联盟

tensorflow KNN OpenCV CNN

主机安全是什么意思?安全体检包含哪些方面?

行云管家

运维 服务器 主机 主机安全 安全体检

iOS开发面试拿offer攻略之数据结构与算法篇附加安全加密

iOSer

ios 数据加密 iOS面试 iOS逆向 iOS算法

幻读是啥,会有什么问题?如何解决?

Java MySQL 数据库 面试 后端

汽车智能座舱中 显示屏市场战略趋势分析 上篇

SOA开发者

软件定义汽车

阿里巴巴Java方向面试题汇总(含答案),为什么数据库会丢失数据

Java 程序员 后端

阿里,快手,拼多多等7家大厂Java面试真题,Java笔试题及答案详解

Java 程序员 后端

阿里,快手,拼多多等7家大厂Java面试真题,Java面试题高级

Java 程序员 后端

FunTester框架Redis性能测试之list操作

FunTester

redis 性能测试 测试框架 压力测试 FunTester

与springcloud整合的框架源码读取入口

Java 编程 架构 微服务

堡垒机作用之事后审计详细讲解-行云管家

行云管家

运维 网络安全 运维审计 事后审计

开便利店可以实现财富自由吗?

石头IT视角

阿里巴巴发布“限量版”Java零基础宝典,38岁的中年失业者怎么活下去

Java 程序员 后端

阿里,快手,拼多多等7家大厂Java面试真题,Java开发面经分享

Java 程序员 后端

作为一线技术人员,如何更好地提升自己

谙忆

管理 成长 引航计划

2021年公有云市场的5大趋势

云计算

Percolator模型及其在TiKV中的实现

vivo互联网技术

数据库 Percolator 分布式,

深入理解掌握零拷贝技术

Linux服务器开发

网络协议 零拷贝 Linux服务器开发 Linux内核 用户态

二十不惑的年纪,我简直走了狗屎运(4面拿字节跳动offer)

Java 程序员 架构 面试 计算机

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