《Kotlin从小白到大牛》第1章:开篇综述

第1章 开篇综述

Java诞生到现在已经有20多年了,Java仍然是非常热门的编程语言之一,很多平台中使用Java开发。但由于历史的原因Java语法有些繁琐、冗余,而本书要介绍的Kotlin语言设计目标是取代Java语言,简化应用开发。

1.1 Kotlin语言简介

Kotlin语言是基于Java虚拟机(Java Virtual Machine 简称JVM)的现代计算机语言。作为一种Java虚拟机语言Kotlin编写的程序可以运行在任何Java能够运行的地方。

1.1.1 Kotlin语言历史
Kotlin语言是JetBrains公司[1]开发的。JetBrains公司是著名的计算机语言开发工具提供商,最著名的当属Java集成开发工具IntelliJ IDEA。作为开发工具提供商JetBrains对于Java语言有着深入的理解,有着迫切地化繁为简的需求。JetBrains从2010年开始构思,2011年推出Kotlin项目;2012年将Kotlin项目开源;2016年发布一个稳定版1.0;2017谷歌I/O全球开发者大会上,谷歌宣布Kotlin语言成为Android应用开发一级语言。
至于这种新的语言为什么命名为Kotlin?这是因为新语言是由JetBrains的俄罗斯圣彼得堡罗斯团队设计和开发的,他们想用一个岛来命名新语言,或许有因为Java命名源自于爪哇(Java)岛,这里盛产Java咖啡。他们找到了位于圣彼得堡以西约30公里处芬兰湾中的一个科特林岛,科特林的英文是Kotlin,因此将新语言命名为Kotlin。
[1] JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄罗斯的圣彼得堡及美国的波士顿设有开发团队。

1.1.2 Kotlin语言设计目标
Kotlin首先被设计为用来取代Java语言。目前主要的应用场景:
o 服务器端编程。基于JavaEE的Web服务器端开发和数据库编程等。
o Android应用开发。替代Java语言编写Android应用程序。
Kotlin这两种场景的应用都需要Java虚拟机(Java Virtual Machine,JVM)也是本书重点介绍的。
此外,Kotlin还有其他目前处于原型阶段的应用场景:
o 编译成JavaScript代码。Kotlin代码还可以编译成JavaScript代码,这样就可以应用于Web前端开发。
o 编译成本地(Native)代码。Kotlin代码还可以编译成本地(Native)代码,本地代码运行不再需要Java虚拟机,类似于C语言。

1.2 Kotlin语言特点

Kotlin具体现代计算机语言特点,如类型推导、函数式编程等。下面详细解释一下:
1.简洁
简洁是Kotlin最主要的特点,实现同样的功能Kotlin代码量会Java代码量缩减很多。Kotlin中数据类、类型推导、Lambda表达式和函数式编程都可以大大减少代码行数,使得代码更加简洁。
2.安全
Kotlin可以有效地防止程序员疏忽所导致的类型错误。Kotlin与Java一样都是静态类型语言[1],编译器会在编译期间检查数据类型,这样程序员会在编码期间发现自己的错误,避免错误在运行运行期发生而导致系统崩溃。另外,Kotlin与Swift[2]类似支持非空和可空类型,默认情况下Kotlin与Swift的数据类型声明的变量都是不能接收空值(null)的,这样的设计可以防止试图调用空对象而引发的空指针异常(NullPointerException),空指针异常也会导致系统崩溃。
3.类型推导
Kotlin与Swift类似都支持类型推导,Kotlin编译器可以根据变量所在上下文环境推导出它的数据类型,这样在变量时可以省略明确指定数据类型。
4.支持函数式编程
作为现代计算机语言Kotlin支持函数式编程,函数式编程优点:代码变得简洁、增强线程安全和便于测试。
5.支持面向对象
虽然Kotlin支持函数式编程,但也不排除面向对象。面向对象与函数式编程并不是水火不容,函数式编程是对面向对象重要补充,而且面向对象仍然是编程语言的主流,面向对象便于系统分析与设计。
6.Java具有良好的互操作性
Kotlin与Java具有100%互操作性,Kotlin不需要任何转换或包装就可以调用Java对象,反之亦然。Kotlin完全可以使用现有的Java框架或库。
7.免费开源
Kotlin源代码是开源免费的,它采用Apache 2许可证,源代码下载地址https://github.com/jetbrains/kotlin。
[2] 静态类型语言会在编译期检查变量或表达式数据类型,如Java和C++等。与静态类型语言相对应的是动态类型语言,动态类型语言会在运行期检查变量或表达式数据类型,如Python和PHP等。
[3] Swift语言是苹果公司推出的编程语言,目前主要应用于苹果的macOS、iOS、tvOS和watchOS 4等应用开发。

1.3 Kotlin与Java虚拟机

Kotlin是依赖于Java虚拟机运行的语言,因此初学者有必要熟悉一下Java虚拟机作用。

1.3.1 Java虚拟机
Java应用程序能够跨平台运行,主要是通过Java虚拟机实现的。如图1-1所示,不同软硬件平台Java虚拟机是不同的,Java虚拟机往下是不同的操作系统和CPU,使用或开发时需要下载不同的JRE或JDK版本。Java虚拟机往上是Java应用程序,Java虚拟机屏蔽了不同软硬件平台,Java应用程序不需要修改,不需要重新编译直接可以在其他平台上运行。
《Kotlin从小白到大牛》第1章:开篇综述
1.3.2 Kotlin应用程序运行过程
要了解Kotlin应用程序运行过程,则需要先了解Java应用的运行过程。
Java程序运行过程如图1-2所示,首先由Java编译器将Java源文件(.java文件)编译成为字节码文件(.class文件),这个过程可以通过JDK(Java开发工具包)提供的javac命令进行编译。当运行Java字节码文件时,由Java虚拟机中的解释器将字节码解释成为机器码去执行,这个过程可以通过JRE(Java运行环境)提供的java命令解释运行。
《Kotlin从小白到大牛》第1章:开篇综述
基于Java虚拟机的Kotlin应用程序运行过程类似于Java程序运行过程,其过程如图1-3所示,首先由Kotlin编译器将Kotlin源文件(.kt文件)编译成为字节码文件( Kt.class文件),注意这个过程中文件名会发生变化,会增加Kt后缀,例如:Hello.kt源文件编译后为HelloKt.class文件。编译过程可以通过Kotlin编译器提供的kotlinc命令进行编译。当运行Kotlin字节码文件时,由Java解释器将字节码解释成为机器码去执行,这个过程也是通过java命令解释,但需要Kotlin运行时库支持才能正常运行。
《Kotlin从小白到大牛》第1章:开篇综述

1.4 如何获得帮助

对于一个初学者必须要熟悉如下几个Kotlin相关网址:
Kotlin源代码网址:https://github.com/JetBrains/kotlin
Kotlin官网:https://kotlinlang.org/
Kotlin官方参考文档:https://kotlinlang.org/docs/reference/
Kotlin标准库:https://kotlinlang.org/api/latest/jvm/stdlib/index.html
下面重点说明Kotlin标准库,其他的网址不再赘述。Kotlin标准库是由Kotlin官方开发的,Kotlin语言是基于Java的,能够与Java完全地互操作,所以Kotlin可以调用Java对象,反之亦然。所以,Kotlin语言尽可能利用Java自带库,然后在这些库上进行一些扩展(Extension)和必要的封装,这就是Kotlin标准库所包含的内容。
《Kotlin从小白到大牛》第1章:开篇综述
作为Kotlin程序员应该熟悉如何使用Kotlin标准库的API文档。打开Kotlin标准库网址https://kotlinlang.org/api/latest/jvm/stdlib/index.html,页面如图1-4所示。
《Kotlin从小白到大牛》第1章:开篇综述
下面介绍一下如何使用API文档,熟悉一下API文档页面中的各个部分含义,如图1-5所示是Array类API文档,从图中可见类中包含:构造函数、函数和扩展函数,此外,还包含属性和从父类继承下来的函数和属性等内容。接口与类API的类似这里不再赘述。
《Kotlin从小白到大牛》第1章:开篇综述