春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

为什么应该学习 Kotlin

  • 2015 年 9 月 28 日
  • 本文字数:1651 字

    阅读完需:约 5 分钟

Mark Platvoet 是一名热衷于研究新的编程语言、技术和方法的 Java 和.NET 开发者。最近,他为 JetBrains 推出的新语言 Kotlin 所吸引,并于近日撰文介绍了这门颇具生产力的语言。

许多语言似乎都是源于对某种其它语言的厌倦。在Mark 看来,Kotlin 应该也属于这种情况。不过他觉得,JetBrains 的工程师仍然将Java 视为一门优秀的语言。只是,Java 太成熟了,改进和增加特性比较困难,因为要保持向后兼容。Kotlin 所做的工作就是吸取Java 和其它语言的经验和教训,并以此为基础进行改进。

Kotlin 处理null的方式是 Mark 最喜欢的特性之一。以下面的 Java 方法为例:

复制代码
public void foo(Bar bar) { /*…*/ }

对于这样一个典型的方法,如果传入的参数为null,那么通常的处理方式是检查输入:

复制代码
public void foo(Bar bar) {
if (bar == null)
throw IllegalArgumentException(); /*…*/
}

如果调用该方法时传入了null,那么它会抛出异常,并提供有用的信息。但这要到运行的时候才能看到。如果方法定义本身就能明确表达不接受null参数的意图就好了。于是,上述代码可以进一步改进为:

复制代码
public void foo(@NotNull Bar bar) {
if (bar == null)
throw IllegalArgumentException() /*…*/
}

如此一来,像 IntelliJ IDEA 这样的工具在检测到调用者可能传入null时就会提醒开发者。这样的代码没错,但就是有点啰嗦。

Kotlin 采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如*Bar?*,而*Bar*类型的变量则不可为空。于是,在 Kotlin 中,上述 Java 代码就变成了下面这样:

复制代码
public fun foo(bar : Bar) { /*…*/ }

Mark 认为,Kotlin 非常简洁且富有表现力。这从上面的例子可见一斑。Mark 还特别指出,他所说的表现力是指代码可以明确的表达开发者的意图,而且有良好的可读性。

Kotlin 的互操作性是 Mark 提到的另一特性。Kotlin 与 Java 的互操作性非常好。开发者可以直接从 Kotlin 中调用 Java 代码,而且不需要任何外观模式或其它中间逻辑;从 Java 调用 Kotlin 同样简单。Kotlin 文件和 Java 文件可以自由混合。即使是现有的 Java 项目,也可以利用 Kotlin,而那些经过严格测试的核心代码可以保持不变。Kotlin 运行在 JDK 6 上,这将使 Android 开发者可以利用 Java 近几年的发展成果,比如 Lambda 表达式。

无独有偶。开发者 Mike Hearn 近日也在 Medium 上发表了一篇赞美 Kotlin 的文章,题为《为什么 Kotlin 是我的下一门编程语言》。Mike 非常喜欢 Kotlin,在未来 5 到 10 年中,他可能都会使用这门语言。Mike 根据自己的经验将 Kotlin 的优势总结为如下几点:

  • Kotlin 编译成 JVM 字节码或 JavaScript——这不仅会吸引 Java 开发人员,还会吸引所有使用垃圾收集运行时的开发人员,比如使用 Scala、Go、Python、Ruby 和 JavaScript 的开发人员。
  • Kotlin 来自业界,而非学术界——它解决了程序员现如今在工作中面临的问题。
  • 采用成本低——JetBrains 提供了高质量的转换工具(可以实现 Java 到 Kotlin 代码的一键转换),而且特别注重 Java 二进制兼容性。开发者可以一次仅转换现有 Java 项目中的一个文件,整个项目仍然可以正常编译。
  • Kotlin 程序可以使用所有现有的 Java 框架和库,并可以集成 Maven、Gradle 和其它构建系统。
  • 易于学习——Kotlin 语法简洁直观,看上去非常像 Scala,但更简单。 它不遵循特定的编程哲学,如函数式风格或面向对象风格。
  • 不增加运行时开销——Kotlin 标准库非常紧凑,主要包含 Java 标准库的扩展。
  • 适合 Android 开发——借助像 Anko Kovenant 这样的框架,Kotlin 将在 Android 开人员中流行。
  • IntelliJ 对 Kotlin 提供了良好的支持

Mike 的部分观点与 Mark 不谋而合。此外,Mike 还总结了 Kotlin 的一些优秀特性,感兴趣的读者可以进一步阅读


感谢郭蕾对本文的审校。

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

2015 年 9 月 28 日 19:006586
用户头像

发布了 1008 篇内容, 共 336.4 次阅读, 收获喜欢 318 次。

关注

评论

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

分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起

Java 程序员 后端

十月一奉上九大核心专题,630页内容,祝你收割大厂offer

Java 程序员 后端

单机下如何让Java程序支持百万长连接,你知道吗?,云计算架构师认证

Java 程序员 后端

第15份敏捷年度状态报告

Bruce Talk

敏捷 Agile

刚从蚂蚁金服面试回来,分享我拿到社招Java研发岗offer的过程

Java 程序员 后端

初来乍到,IT职场人,有些黑话要先了解(1),springboot定时任务注解原理

Java 程序员 后端

初识动态规划,java程序设计教程第三版机械工业出版社

Java 程序员 后端

加班2个月,肛出最强干货之“Spring全家桶,rabbitmq消息队列原理

Java 程序员 后端

分享成功逆袭到美团面试心得:面试题(含答案,springboot面试题

Java 程序员 后端

创建和销毁对象-考虑用静态工厂方法代替构造器,熬夜整理出Java后端学习路线

Java 程序员 后端

前端同事老是说swagger不好用,我用了knife4j后,同事爽得不行

Java 程序员 后端

前端向后端进发之----Springboot JPA增删改查,外包Java后端开发三年

Java 程序员 后端

分布式系统改造方案——数据篇,Java架构师视频

Java 程序员 后端

千万级电商项目从0到1到100全过程 涵盖Java程序员不同成长阶段的问题及优选解决方案!

Java 程序员 后端

写了一年golang,来聊聊进程、线程与协程,javamap底层原理

Java 程序员 后端

写博客是一种乐趣,一种需要培养的乐趣,【性能优化实战】

Java 程序员 后端

分享我的2021京东4面面经,送给备战金三银四的你,Java小程序开发实例

Java 程序员 后端

制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)

Java 程序员 后端

十个超酷的java谋生方式,你喜欢吗?,linux网络编程书籍

Java 程序员 后端

出招吧!腾讯专家手敲《Redis源码日志笔记,如何成为一个更好的Java开发者

Java 程序员 后端

分享23种追女生的方式,教你同时把追MM和设计模式融汇贯通(下

Java 程序员 后端

删了HDFS又能怎样?记一次删库不跑路事件,kafka的架构图

Java 程序员 后端

力荐:提高千倍效率的一些 Java 代码小技巧,java语言程序设计教程朱晓龙课后答案

Java 程序员 后端

华为架构师亲手操刀,世界五百强都在用的kafka也就那么回事

Java 程序员 后端

分布式系统的一致性级别划分及Zookeeper一致性级别分析

Java 程序员 后端

创业神器-JAVA开源网盘系统推荐,springaop实现原理面试题

Java 程序员 后端

卧槽,牛皮了!某程序员苦刷这两份算法PDF47天,java大神需要掌握的技术

Java 程序员 后端

初来乍到,IT职场人,有些黑话要先了解,太牛了

Java 程序员 后端

制作Docker镜像,用来下载OpenJDK11源码,分享一点面试小经验

Java 程序员 后端

前端必备 Nginx 配置,kafka原理解析

Java 程序员 后端

千万别踩坑,一面就凉透!Java,java语言程序设计基础篇第十一版答案

Java 程序员 后端

为什么应该学习Kotlin_Java_谢丽_InfoQ精选文章