kotlin入门(一)了解kotlin的背景

662 阅读7分钟

1.kotlin的诞生

(大概有一定原因是java语言中由于各历史版本的兼容问题,变得越来越臃肿了)

在Android系统诞生的前9年时间里,Google都只提供了Java这一种语言来开发Android应用 程序,虽然在Android 1.5系统中Google 引入了NDK功能,支持使用C和C++语言来进行一些 本地化开发,但是这丝毫没有影响过Java的正统地位。

不过从2017开始,一切都发生了改变。Google在2017年的I/O大会上宣布,Kotlin正式成为 Android的一级开发语言,和Java平起平坐,Android Studio也对Kotlin进行了全面的支持。 两年之后,Google又在2019年的I/O大会上宣布,Kotlin已经成为Android的第一开发语言, 虽然Java仍然可以继续使用,但Google更加推荐开发者使用Kotlin来编写Android应用程序, 并且未来提供的官方API也将会优先考虑Kotlin版本。

然而现实情况是,很多人对Java太熟悉了,不太愿意花费额外的时间再去学习一门新语言,再 加上国内不少公司对于新技术比较保守,不敢冒然改用新语言去承担一份额外的风险,因此目 前Kotlin在国内的普及程度并不高。

可是在海外,Kotlin的发展速度已是势如破竹。根据统计,Google Play商店中排名前1000的 App里,有超过60%的App已使用了Kotlin语言,并且这个比例每年还在不断上升。Android官 网文档的代码已优先显示Kotlin版本,官方的视频教程以及Google的一些开源项目,也改用了 Kotlin来实现。

2.kotlin和java的关系

我想大多数人听说或知道Kotlin的时间并不长,但其实它并不是一门很新的语言。Kotlin是由 JetBrains公司开发与设计的,早在2011年,JetBrains就公布了Kotlin的第一个版本,并在 2012年将其开源,但在早期,它并没有受到太多的关注。

2016年,Kotlin发布了1.0正式版,这代表着Kotlin已经足够成熟和稳定了,并且JetBrains也 在自家的旗舰IDE开发工具IntelliJ IDEA中加入了对Kotlin的支持,自此Android开发语言终于 有了另外一种选择,Kotlin逐渐受到广泛的关注。

接下来的事情你已经知道了,2017年Google宣布Kotlin正式成为Android一级开发语言, Android Studio也加入了对Kotlin的支持,Kotlin自此开始大放异彩。

看到这里,或许你会产生一些疑惑:Android操作系统明明是由Google开发的,为什么 JetBrains作为一个第三方公司,却能够自己设计出一门编程语言来开发Android应用程序呢?

想要搞懂这个问题,我们得先来探究一下Java语言的运行机制。编程语言大致可以分为两类: 编译型语言和解释型语言

  • 编译型语言的特点是编译器会将我们编写的源代码一次性地编译成计算机可识别的二进制文件,然后计算机直接执行,像C和C++都属于编译型语言。

  • 解释型语言则完全不一样,它有一个解释器,在程序运行时,解释器会一行行地读取我们编写的源代码,然后实时地将这些源代码解释成计算机可识别的二进制数据后再执行,因此解释型语言通常效率会差一些,像Python和JavaScript都属于解释型语言。

那么接下来我要考你一个问题了,Java是属于编译型语言还是解释型语言呢?对于这个问题, 即使是做了很多年Java开发的人也可能会答错。有Java编程经验的人或许会说,Java代码肯定 是要先编译再运行的,初学Java的时候都用过javac这个编译命令,因此Java属于编译型语言。 如果这也是你的答案的话,那么恭喜你,答错了!虽然Java代码确实是要先编译再运行的,但 是Java代码编译之后生成的并不是计算机可识别的二进制文件,而是一种特殊的class文件,这 种class文件只有Java虚拟机(Android中叫ART,一种移动优化版的虚拟机)才能识别,而这 个Java虚拟机担当的其实就是解释器的角色,它会在程序运行时将编译后的class文件解释成计 算机可识别的二进制数据后再执行,因此,准确来讲,Java属于解释型语言。 (应该先是先将java文件编译成.class文件,然后由java虚拟机(JVM)将其解释为二进制数据)

了解了Java语言的运行机制之后,你有没有受到一些启发呢?其实Java虚拟机并不直接和你编 写的Java代码打交道,而是和编译之后生成的class文件打交道。那么如果我开发了一门新的编 程语言,然后自己做了个编译器,让它将这门新语言的代码编译成同样规格的class文件,Java 虚拟机能不能识别呢?没错,这其实就是Kotlin的工作原理了。Java虚拟机不关心class文件是 从Java编译来的,还是从Kotlin编译来的,只要是符合规格的class文件,它都能识别。也正是 这个原因,JetBrains才能以一个第三方公司的身份设计出一门用来开发Android应用程序的编 程语言。 (kotlin与java类似,是先将kt文件编译成.class文件,然后由java虚拟机(JVM)将其解释为二进制数据)

3.为什么开始学习kotlin,而非java

现在你已经明白了Kotlin的工作原理,但是Kotlin究竟凭借什么魅力能够迅速得到广大开发者的 支持,并且仅在1.0版本发布一年后就成为Android官方支持的开发语言呢?

这就有很多原因了,比如说Kotlin的语法更加简洁,对于同样的功能,使用Kotlin开发的代码量 可能会比使用Java开发的减少50% 甚至更多。另外,Kotlin的语法更加高级,相比于Java比较 老旧的语法,Kotlin增加了很多现代高级语言的语法特性,使得开发效率大大提升。还有, Kotlin在语言安全性方面下了很多工夫,几乎杜绝了空指针这个全球崩溃率最高的异常,至于是 如何做到的,我们在之后的文章中就会学到。

然而Kotlin在拥有众多出色的特性之外,还有一个最为重要的特性,那就是它和Java是100%兼 容的。Kotlin可以直接调用使用Java编写的代码,也可以无缝使用Java第三方的开源库。这使 得Kotlin在加入了诸多新特性的同时,还继承了Java的全部财富。

那么既然Kotlin和Java之间有这样千丝万缕的关系,学习Kotlin之前是不是必须先会Java呢?我 的回答是:如果你掌握了Java再来学习Kotlin,你将会学得更好。如果你没学过Java,但是学 过其他编程语言,那么直接学习Kotlin也是可以的,只是可能在某些代码的理解上,相比有Java 基础的人会相对吃力一些。而如果你之前没有任何编程基础,那么本书可能不太适合你阅读, 建议你还是先从最基础的编程入门书看起。