程序员为什么使用Kotlin?

为什么使用Kotlin

(此处已添加圈子卡片,请到今日头条客户端查看)

欢迎加入程序员读书会,每日分享IT好书以及优惠活动

如今,在软件开发领域,除了现在比较热门的人工智能技术和大数据技术之外,移动开发依然是受到大家关注的领域分支,而移动开发中非常重要的一门技术就是Android开发。Java作为Android开发的官方标准语言,其语法的设计思想还停留在纯命令式语言时代,在函数式语言的大背景下,Java显得有点落伍。虽然随着Java 8和Java 9版本的发布,Java也在向函数式语言靠近,但是Java 8和Java 9的市场份额并不高,很多项目还停留在Java 6的时代。特别是对于Android开发者来说,想体验函数式编程的优势似乎太过遥远。所以,使用Kotlin成为一个不错的选择。

作为一款明星语言,在被Android官方宣布为支持语言之前,Kotlin早已是Android开发中的热门话题了,很多开源的项目都使用Kotlin开发。也正是基于这些原因,在2017年的Google I/O大会上,Google将Kotlin列为Android开发的官方支持语言。在最近TIOBE的热门编程语言排行榜中,它一度进入编程语言前50名,在Github上也获得了很高的关注度。相信随着版本的持续发布和性能的优化,Kotlin一定会走得更远。

在创造Kotlin的过程中,其作者从很多编程语言那里获得了灵感,比如Java、Scala、Groovy,可以说是博采众长。使用Kotlin编写程序,不仅编译运行速度快,而且实现相同功能的代码量远远小于Java。

使用Kotlin主要有以下优势。

1.跨平台开发能力

因为Kotlin是基于JVM开发的,所以它同时具备了Android 开发、Web浏览器开发和原生Native开发的能力。在原生Native开发方面,目前Kotlin官方在Github上开源了Native的源码。在Web开发方面,Kotlin可以结合Spring框架使用,也可以编译生成JavaScript模块,便于在一些JavaScript的虚拟机上编译运行。

2.开源

20世纪80年代,自由软件运动拉开序幕,开源软件为软件行业的快速发展提供了源源不断的动力。众人拾柴火焰高,对于一门新技术、新语言,开源可以帮助开发者更快速地发现Bug,从而利用开源的力量更快地推动新技术的发展。在开源领域方面,Java就是一个很好的例子,从语言标准到Core API、虚拟机、开发者工具,都能找到开放的影子。

3.空指针安全

在使用Java编程的过程中,大家聊得最多的话题莫过于如何避免空指针异常(NullPointerException)。针对空指针问题,Kotlin有专门的语法来避免。

4.完全兼容Java

Kotlin能够和Java达到100%互通,也就是说,使用Kotlin,依旧可以调用 Java已有的代码或库,也可以同时使用Java和Kotlin来混合编写代码。同时,为了方便项目的过渡,JetBrains提供的开发工具可以很简单地实现Java代码到Kotlin的转换。

5.语言简洁,学习成本低

Kotlin语法简洁直观,看上去非常像Scala,但更简单易学。同时,Kotlin使用了大量的语法糖,使得代码更加简洁。Kotlin并不遵循特定的编程规范,它借鉴了函数式风格和面向对象风格的诸多优点。

6.支持Lambda表达式

函数式编程是软件技术的发展方向,而Lambda是函数式编程的基础内容,因此,在Java 8版本中加入Lambda表达式本身是符合技术发展方向的。引入Lambda,一个直观的改进是,不用再写大量的匿名内部类。事实上,还有更多由函数式编程本身特性带来的性能。比如,代码的可读性会更好、高阶函数引入了函数组合的概念等。

除此之外,因为Lambda的引入,集合操作也得到了极大的改善,比如引入Stream API,把map、reduce、filter这样的基本函数式编程概念与Java集合结合起来。在大多数情况下,Java程序员在处理集合时,可以告别繁杂的for、while、if等逻辑语句。

不过,使用Lambda表达式并非只有好处,根据C#之父Anders Hejlsberg所说,未来的编程语言将逐渐融合各自的特性,而不会只存在单纯的声明式语言或者函数编程语言。

7.类型推断

使用Kotlin编程,开发人员不必为每个变量明确指定类型,编译器可以在编译的时候推导出某个参数的数据类型,从而使得代码更为简洁。Java在Java 8版本中也推出这一功能。

8.支持自定义的DSL

DSL(Domain-Specific Language),中文含义是领域特定语言,指的是专注于特定问题领域的计算机语言。不同于通用的计算机语言,领域特定语言只用于某些特定的领域。

DSL语言能让开发者以一种更优雅、更简洁的方式来表达和解决领域问题。例如,Gradle就是一种用Groovy定义的DSL。Kotlin的Lambda系统使其成为创建DSL的理想选择。

9.IDE环境的支持

作为JetBrains旗下的产品,JetBrains旗下众多的IDE可以为Kotlin开发提供无缝支持,并相互协作,协同发展。

可以用图1-7来大致总结Kotlin的主要优势。



图1-7 使用Kotlin的主要优势

正是因为Kotlin的这些优势,在2017年的Google I/O大会上,Google将Kotlin列为Android开发的第一语言。在旧金山举行的第一届Kotlin专题会议上,Kotlin官方宣布将会在1.2版本中添加支持iOS开发的功能。这难道是要成为全栈语言的节奏吗?

1.5 Kotlin与Java的比较

作为面向对象编程时代的明星编程语言,Java在开放的生态环境下,赢得了Oracle、Google、Apache、Eclipse基金会等各大厂商的支持,这些厂商的支持加快了Java生态圈的建设。一时间Java的生态圈异常繁荣,各种优秀的开源框架层出不穷,较为著名的有Spring Boot、Spring Cloud、Hadoop、Spark和Kafka等。

虽然Java的生态圈异常强大,但是作为纯命令式语言时代的产物,Java和当前流行的函数式编程语言相比,在类型、语法与编程范式方面显得越来越落后。所以,寻找一种既可以突破Java的这些局限,又可以与Java和谐共处的语言成为软件行业努力的方向。不过庆幸的是,Java之父詹姆斯·高斯林在创造Java语言时就想到了这些问题,所以在设计之初,就有意将Java语言与运行时环境JVM进行分离。JVM负责与操作系统的交互,屏蔽了具体操作系统的细节,这使得基于JVM开发的系统可以运行在任何操作系统之上。如今众多的新兴语言都运行在JVM上,Groovy、Scala、Kotlin、Clojure算得上是其中的佼佼者。

那么,Kotlin 相比Java有哪些优势呢?

  • 更容易学习:Kotlin是一门具备函数式编程思想的面向对象编程语言,它具有静态编程语言的很多特点,更加容易学习。
  • 更快的编译速度:第一次编译Kotlin代码时,它需要比Java更长的时间,当使用增量编译的时候,Kotlin则比Java更快。
  • 性能:由于有着非常相似的字节码结构,因此Kotlin应用程序的运行速度与Java类似。随着Kotlin对内联函数的支持,使用Lambda表达式的代码通常比用Java 写的代码运行得更快。
  • 空指针安全:Kotlin对比于Java的一个优点就是可以有效解决空指针问题,毕竟“价值十亿美元的错误”不是人人都犯得起的。
  • 跨平台特性:Kotlin除了可以用来开发移动Android App之外,还可以用来进行服务端框架开发和Web浏览器开发。
  • 与IDE无缝融合:在Google官方发布的Android Studio 3.0上,已经默认集成了Kotlin,对于一些老版本,也可以通过插件的方式来集成Kotlin。所以,使用JetBrains提供的IDE,可以为Kotlin开发提供较好的环境支持。

当然,除了上面提到的一些优势之外,Kotlin还具有很多现代静态编程语言的编程特点,如类型推断、多范式支持、可空性表达、扩展函数、DSL 支持等,而这些功能Java在最近的版本才陆续添加。

另外,对于Android开发来说,Kotlin还提供了Kotlin Android扩展和Anko库。其中,Kotlin Android扩展是编译器扩展,可以让开发者摆脱代码中繁杂的 findViewById() 调用并将其替换为合成的编译器生成的属性。Anko 是JetBrains开发的围绕Android API的包装器库,目的是替代传统XML方式构建UI布局。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();