Kotlin Primer·第一章·启程



对本文有任何问题,可加我的个人微信询问:kymjs666

题外话:全书的目录以及主要内容已经公开,可在我公众号【技术实验室】的历史推送文章查看

第一部分——快速上手
第一章·启程
第二章·基本语法
第三章·Kotlin 与 Java 混编
第二部分——开始学习 Kotlin
第四章·Kotlin 的类特性(上)
第四章·Kotlin 的类特性(下)
第五章·函数与闭包
第六章·集合泛型与操作符
第三部分——Kotlin 工具库
第七章·协程库(上篇)
第七章·协程库(中篇)

如果你觉得我的 Kotlin 博客对你有帮助,那么我强烈建议你看看我的极客时间 Kotlin 视频课程。视频中讲述了很多实际开发中遇到问题的解决办法,以及很多 Kotlin 特性功能在工作中实际项目上的应用场景。

欢迎阅读本书!Kotlin 语言是一种新的静态类型编程语言,可运行于 JVM 环境同时也能用来开发 Android 应用。本章为学习和使用这一新兴的语言做准备,并讨论在一些常见开发环境中运行 Kotlin 程序的方法。

1.1 Kotlin语言介绍

Kotlin 是 JetBrains 在 2010 年推出的基于 JVM 的新编程语言。开发者称,设计它的目的是避免 Java 语言编程中的一些难题。比如:在 Kotlin 中类型系统控制了空指针引用,可以有效避免 Java 中常见的NullPointException。
作为一个跨平台的语言,Kotlin 可以工作于任何 Java 的工作环境:服务器端的应用,移动应用(Android版),桌面应用程序。

1.2 Kotlin的优势

相比于 Java,Kotlin 有着更好的语法结构,安全性和开发工具支持。
Kotlin 中没有基础类型,数组是定长的,泛型是安全的,即便运行时也是安全的。此外,该语言支持闭包,还可通过内联进行优化。不过,它不支持检查异常(Checked Exceptions),许多语言设计者认为这是它的瑕疵。不论如何,重要的是 Java 和 Kotlin 之间的互操作性:Kotlin 可以调用 Java,反之亦可。

1.3 准备工作

Intellij IDEA 是 JetBrains 提供的继承开发环境,可以用来开发 Kotlin 应用程序。
如果你是一名 Android 开发者,你也可以使用 Android Studio 来开发 Kotlin 程序。如你所知,Android Studio 其实就是 Intellij IDEA 的插件扩展,Intellij IDEA 是由 JetBrains 所开发,而 Kotlin 同样是由 JetBrains 创造的,其中的兼容性自然不用多说。
在安装好 Intellij IDEA 后,还需要安装 Kotlin 插件。
说明:从 Intellij 15 开始,已经自带了 Kotlin 插件,无需再次下载,而 Android Studio 却没有。不过还是建议你运行一下下面的步骤,检查一下插件是否为最新版。

首先启动你的 IDE,按下快捷键 Ctrl+, (Mac 下为 command+,) 打开Preference 界面。
点击左侧 Plugin 栏,打开插件界面。
点击 Browse repositories(如图1-3-1)。

Android, kotlin

在弹出的窗口上方,搜索 "Kotlin",选中 Kotlin 和 Kotlin Extension For Android(1.1以后两个插件已经合并为一个)。
点击右侧的 Install。
安装完成后按钮会变成 Restart,再次点击重启 IDE。
刚刚安装的这两个插件分别为 Kotlin 语言支持包,和我们稍后会用到的Android 开发的扩展包。

一点小技巧:也许由于网络环境原因,会造成下载失败。可以根据弹出窗口中提示的(或直接在 JetBrains 插件市场搜索)下载链接,使用国内网盘的离线下载功能,下载到网盘后再从网盘下载到本地。

1.4 Hello Kotlin

1.4.1 第一个Kotlin程序

首先我们打开 Intellij 选中 Create a new project 选项后可以看到如下界面。
在 Additional Libraries and Frameworks 选项框中,如果你已经成功安装 Kotlin 插件,可以直接勾选 Kotlin(Java) 选项。
再点击下方的 Create 按钮,在弹出的 Create Kotlin Java Runtime Library 选项框中,我们选择 Use library from plugin 并确定(如图1-4-1)。

Android, kotlin

点击 Next,填写工程名和路径,这里我们创建一个名为 Hello 的工程,并点击 Finish 完成创建(如图1-4-2)。

Android, kotlin

首次创建工程需要等待一段时间,编译器这个时候正在帮助我们下载一些必要的依赖项。
工程构建完成后,右键工程目录的 src 图标,选择 New -> Kotlin File,这里我们新建一个名为 Hello 的 Kotlin 源码文件(如图1-4-3)。

Android, kotlin

看一下左侧的工程目录,src 文件夹中存放的是源码,可以在这里新建包或类;Hello.iml 文件声明了一些项目所需的环境依赖,我们不用关心。
于是,终于可以开始激动人心的编码了。

Android, kotlin

Kotlin 程序非常简单,简单到只需要三行代码,相比起 Java 连包名都不是必须的。

fun main(args: Array<String>) {
    print("hello kotlin!")
}

按下 Ctrl+R 快捷键,或者右上角绿色三角形,运行写好的程序(如图1-4-5)

Android, kotlin

同 Java 语言一样,Kotlin 程序主入口也是 main() 函数。但是作为函数是一等公民的语言,它不需要像 Java 那样必须声明一个类。
在 Kotlin 中,函数的声明用 fun 表示,变量也与 Java 不同,是变量名在前,变量类型在后,中间用冒号隔开。
同时你也一定发现了,Kotlin 程序非常简洁,连分号也不需要写,当然如果你是刚从 Java 过渡来的,改不掉或不想改掉这个习惯,写上了也不会有错,因为它是可选的。
同时,我们还可以发现,在左侧的工程目录多了一个红色名为 out 的目录,它是用来存放 .class 文件的。

1.4.2 面向对象的Kotlin程序

下面我们将 Hello 程序改一改,为它加入一些面向对象的特性。
我们创建一个包,并在包下新建名为Person的类。

package com.kymjs.kotlin.helloobj

class Person(val name: String) {
    fun printName() {
        println(name)
    }
}

再回到Hello.kt文件中,修改 main() 函数

import com.kymjs.kotlin.helloobj.Person

fun main(args: Array<String>) {
    println("hello kotlin!")
    Person("Zhang Tao").printName()
}

再次按下 Ctrl+R 快捷键,或者右上角绿色三角形,运行写好的程序(如图1-4-6)

Android, kotlin

细心查看代码,Kotlin 创建对象的时候并不需要new关键字,而是像调用普通方法一样直接调用构造方法就可以了。
同时,由于两个文件不在同一个包下,需要导入Person类所在的包才能找到,当然,编译器已经帮我们解决了繁杂的导包过程。

1.5 编码风格

有关编码风格的一点建议,同 Java 类似,使用驼峰命名法,类名首字母大写,每个单词的首字母大写;方法和属性变量首字母小写;采用四个空格缩进。
值得一提的是,官方文档中建议在 Kotlin 语言中不要给属性前面加前缀,例如通常我们习惯加上一个小写m或者下划线等。
冒号,在分隔两个类型的时候,应该在左右都有空格,在实例和类型之间,应该紧靠实例变量,例如:

interface Foo<out T : Any> : Bar {
    fun foo(a: Int): T
}

Lambdas表达式,如果是简单的只用一行就可以表示的 lambda,应当遵循在大括号的两侧、箭头的两侧、参数的两侧都使用空格隔开,例如:

list.filter { it > 10 }.map { element -> element * 2 }

1.6 小结

在本章中,你已经编写了两个 Kotlin 程序,相信你也已经对 Kotlin 产生了兴趣。希望你也能像我一样,沉醉于使用 Kotlin 开发。
继续学习下一章的内容吧,我们将进入 Kotlin 的语法世界。