Kotlin
Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。
Kotlin简介
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。
Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
Kotlin是由JetBrains开发的针对JVM、Android和浏览器的静态编程语言,目前,在Apache组织的许可下已经开源。使用Kotlin,开发者可以很方便地开发移动Android应用、服务器程序和JavaScript程序。Kotlin可以将代码编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
Kotlin来源于一个岛屿的名字,全称是Kotlin Island,是英语【科特林岛】之意,这个小岛位于俄罗斯的圣彼得堡附近。之所以要命名为Kotlin,是因为Kotlin的主要开发工作就是由位于圣彼得堡分公司团队完成的。
在纯命令式编程时代,Sun公司创造了Java和标准库,但一直以来Sun都没有为Java提供一款好用的IDE。在这样的局面下,IBM适时地推出了一款名为Eclipse的IDE,成为对抗Sun公司的利器。
近十几年来,Eclipse凭借着开源和可扩展平台(OSGi),战胜了一个又一个对手(JBuilder、NetBeans等),奠定了Java标准开发环境的地位。然而,就像所有成功的产品一样,Eclipse一路荣光走来的同时也遇到了一系列的问题。所谓船大调头难,近年来,在JetBrains公司一系列产品的冲击下,Eclipse的市场份额正在慢慢下降。
作为目前广受欢迎的IDE提供商,JetBrains向开发者提供主流的软件开发环境:IntelliJ IDEA、WebStorm、PyCharm等,这些IDE几乎覆盖了目前主流的编程语言。
在开发Kotlin之前,JetBrains团队一直使用Java来创建他们的IDE以及使用Java进行业务逻辑开发。之所以开发Kotlin,是因为JetBrains 的工程师们在使用Java开发应用程序的过程中,发现了大量的问题。为了提升开发效率以及解决使用Java开发带来的问题,在借鉴了Scala、Groovy等语言后,他们决定开发一款致力于解决Java问题的编程语言Kotlin。
JetBrains深谙开发者的需求和痛处,在孜孜不倦地为开发者提供最实用、最高效的IDE的同时,也为开发者提供全新的编程语言以解决目前的技术问题。
为什么使用Kotlin
如今,在软件开发领域,除了现在比较热门的人工智能技术和大数据技术之外,移动开发依然是受到大家关注的领域分支,而移动开发最重要的一门技术就是Android开发。Java作为Android开发的官方标准语言,其语法的设计思想还停留在纯命令式语言时代,在函数式语言的大背景下,Java显得有点落伍。虽然随着Java 8和Java 9版本的发布,Java也在向函数式语言靠近,但是Java8和Java9的市场份额并不高,好多的项目还停留在Java 6的时代。特别是对于Android开发者来说,想体验函数式编程的优势似乎太过遥远。所以,使用Kotlin成为最佳的选择。
作为一款明星语言,在被Android官方宣布为支持语言之前,Kotlin早已是Android开发中的热门话题了,很多开源的项目都使用用Kotlin开发。也正是基于这些原因,在今年的Google I/O大会上,Google将Kotlin列为Android开发的官方支持语言。在最近TIOBE的热门编程语言排行榜中,一度进入编程语言前50名,在Github上也获得了超过19K的Star。相信随着Kotlin版本的持续发布和性能的优化,Kotlin一定会走的更远。
在创造Kotlin语言的过程中,Kotlin从不少编程语言那里获得灵感,比如 Java、Scala、Groovy,可以说是博采众长。使用Kotlin编写的代码,不仅编译运行速度快,而且实现相同的功能代码量远远小于Java的实现。
使用Kotlin主要有以下优势:
跨平台开发能力
因为Kotlin是基于JVM开发的,所以它同时具备了Android 开发、Web浏览器开发、原生Native开发的能力。在原生Native开发方面,目前Kotlin官方在Github上开源了Native的源码(Github地址:https://github.com/JetBrains/
kotlin-native)。在Web开发方面,Kotlin可以结合Spring框架使用,也可以编译生成JavaScript模块,方便在一些JavaScript的虚拟机上编译运行。
开源
20世纪80年代,自由软件运动拉开序幕,开源软件为软件行业的快速发展提供了源源不断的动力。众人拾柴火焰高,对于一门新技术、新语言,开源可以更快速地发现Bug,从而利用开源的力量更快的推动新技术的发展。在开源领域方面,Java就是一个好例子,从语言标准,到Core API、虚拟机、开发者工具,这些都能找到开放的影子。
100%兼容Java
Kotlin能够和Java达到100%互通,也就是说,使用Kotlin依旧可以调用 Java已有的代码或库,也可以同时使用Java和Kotlin来混合编写代码。同时,为了方便项目的过渡,JetBrains提供的开发工具可以很简单的实现Java代码到Kotlin的转换。
空指针安全
在使用Java编程的过程中,大家聊得最多的话题莫过于如何避免空指针异常(NullPointerException)。针对空指针问题,Kotlin有专门的语法来避免空指针问题。
语言简洁,学习成本低
Kotlin语法简洁直观,看上去非常像Scala,但更简单易学。同时,Kotlin使用了大量的语法糖,使得代码更加简洁。Kotlin并不遵循特定的编程规范,它借鉴了函数式风格和面向对象风格的诸多优点。
支持Lambda表达式
函数式编程是软件技术的发展方向,而Lambda是函数式编程最基础的内容,因此,在最近的Java 8版本中,Java加入Lambda表达式本身是符合技术发展方向的。引入Lambda,最直观的一个改进是,不用再写大量的匿名内部类。事实上,还有更多由于函数式编程本身特性带来的性能。比如,代码的可读性会更好、高阶函数引入了函数组合的概念等。
除此之外,因为Lambda的引入,集合操作也得到了极大的改善。比如,引入stream API,把map、reduce、filter这样的基本函数式编程的概念与Java集合结合起来。在大多数情况下,Java程序员在处理集合时,可以告别繁杂的for、while、if等逻辑语句。
不过,使用Lambda表达式并非只有好处没有坏处,正如C#之父Anders Hejlsberg在《编程语言大趋势》一文中所说,未来的编程语言将逐渐融合各自的特性,而不会只存在单纯的声明式语言或者单纯的函数编程语言。
类型推断
使用Kotlin编程,开发人员不必为每个变量明确指定类型,编译器可以在编译的时候推导出某个参数的数据类型,从而使得代码更为简洁。Java在最近的Java 8版本中也推出这一功能。
支持自定义的DSL
DSL(Domain-Specific Language),全称领域特定语言,指的是专注于特定问题领域的计算机语言。不同于通用的计算机语言(GPL),领域特定语言只用在某些特定的领域。
DSL语言能让开发者以一种更优雅、更简洁的方式来表达和解决领域问题。例如,gradle就是一种用groovy定义的dsl。Kotlin的lambda系统使其成为创建DSL的理想选择。
IDE环境的支持
作为JetBrains旗下的产品,JetBrains旗下众多的IDE可以为Kotlin开发提供无缝支持,并相互协作,协同发展。
正式因为Kotlin的这些优势,在今年的Google I/O大会上,Google将Kotlin列为Android开发的第一语言。在不久前旧金山举行的第一届Kotlin专题会议会议上,Kotlin官方宣布将会在1.2版本中添加支持iOS开发的功能。这难道是要成为全栈语言的节奏吗。
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布局。