1.4 为什么使用Kotlin
如今,在软件开发领域,除了现在比较热门的人工智能技术和大数据技术之外,移动开发依然是受到大家关注的领域分支,而移动开发中非常重要的一门技术就是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开发的功能。这难道是要成为全栈语言的节奏吗?