Kotlin应用开发初体验

Kotlin应用开发初体验

2011年,JetBrains宣布开发Kotlin编程语言。这门新语言可以用来编写在Java虚拟机上运行的代码,是Java和Scala语言之外的又一选择。六年后,Google宣布,Kotlin正式获得官方支持,可用于Android应用开发。

Kotlin的应用范围迅速扩展,它从一门前途光明的编程语言摇身一变,成了这个世界上最重要的移动操作系统的钦定开发语言。Kotlin语法简洁,具备现代高级语言特性,并且能和Java遗留代码无缝互操作。因为具备这些优势,今天,越来越多的大公司已开始接纳Kotlin,如Google、Uber、Netflix、Capital One、Amazon等。

为什么要学Kotlin

要想知道为什么Kotlin广受欢迎,首先要理解Java在现代软件开发领域中所扮演的角色。这两门语言联系得非常紧密,因为很多时候,Kotlin代码的开发目标就是要在Java虚拟机上运行。

Java语言比较稳健,久经考验。多年来,它一直是最常用的一种编程语言,造就了庞大的生产代码库。自从1995年Java问世以来,对于优秀的编程语言应满足什么条件,人们已通过实践积攒了很多经验教训。然而,Java却裹足不前,开发者喜欢的很多现代语言高级特性,它都没有,或者迟迟才加入。

Kotlin从这些经验教训中受益良多,而Java(和其他语言,比如Scala)中的某些早期设计却愈显陈旧。脱胎于旧语言,Kotlin解决了它们的很多痛点,进化成了一门优秀的语言。相比Java,Kotlin进步巨大,带来了更可靠的开发体验。

作为一门新秀语言,Kotlin不仅支持编写代码在虚拟机上运行,而且还是一门跨平台的通用型语言:你可以用Kotlin开发各种类型的原生应用,如macOS应用、Windows应用、JavaScript应用,当然还有Android应用。平台独立性意味着Kotlin有各种各样的用途。

下面我们就来体验一下Kotlin。

Kotlin应用开发初体验

下面我们来学习使用IntelliJ IDEA开发首个Kotlin应用。借此,来熟悉开发环境,创建Kotlin新项目,编写并运行Kotlin代码,以及查看输出结果。本文创建的是一个沙盒项目,可演练代码,以学习理解本文中的各种新概念。

一、安装IntelliJ IDEA

IntelliJ IDEA是一套Kotlin集成开发环境。JetBrains公司创建了Kotlin语言并打造出了这套开发工具。开始学习前,请先访问JetBrains公司网站https://www.jetbrains.com/idea/download,下载IntelliJ IDEA社区开发版软件(见图1)。

Kotlin应用开发初体验

图1 下载IntelliJ IDEA社区开发版软件

下载完毕后,请参考https://www.jetbrains.com/help/idea/install-and-set-up-product.html网页,完成对应平台IntelliJ IDEA开发工具的安装与配置。

IntelliJ IDEA简称IntelliJ,能帮助开发者编写风格良好的Kotlin代码。利用其内建工具,运行、调试、检查以及重构代码的整个开发过程能无缝衔接,一气呵成。有鉴于此,我们推荐使用IntelliJ做Kotlin开发。若想进一步了解使用IntelliJ做Kotlin开发的理由,请接着往下阅读。

二、第一个Kotlin项目

Kotlin语言及强大的开发环境都有了,接下来只剩一件事要做:学会流畅运用Kotlin语言。作为首个练手任务,我们来创建一个Kotlin项目。

启动IntelliJ。如图2所示,映入眼帘的是IntelliJ IDEA的欢迎界面。

Kotlin应用开发初体验

图2 欢迎界面

若非首次安装使用,IntelliJ会直接打开上一个项目。要回到欢迎界面,选择File → Close Project关闭项目即可。

单击Create New Project选项,会看到如图3所示的创建新项目对话框。

Kotlin应用开发初体验

图3 创建新项目对话框

在创建新项目对话框中,选择左侧的Kotlin选项,然后选择右边出现的Kotlin/JVM选项,结果如图4所示。

Kotlin应用开发初体验

图4 创建一个Kotlin/JVM项目

除了Kotlin,IntelliJ还支持Java、Python、Scala以及Groovy等其他编程语言。选择Kotlin/JVM就是告诉IntelliJ你要用Kotlin编程。更确切地讲,就是要编写面向并且在Java虚拟机上运行的Kotlin代码。顺便提一下,Kotlin还有个优势:内置的工具链支持编写能在不同操作系统和平台上运行的Kotlin代码。

(从现在起,提到Java虚拟机,都以Java开发社区常用的JVM来替代。后面还会介绍更多有关面向JVM的知识。)

单击Next按钮继续。你会看到新项目设置界面,如图5所示。输入“Sandbox”作为项目名称,IntelliJ会自动给出默认项目路径。如有需要,可以单击右侧的…按钮自定义项目路径。在Project SDK的下拉框中点选Java 1.8,这样,新项目就关联上了JDK 8。

Kotlin应用开发初体验

图5 给新项目命名

你可能会问,编写Kotlin程序为什么需要JDK?答案就是,为了把Kotlin代码转译为字节码(稍后详述),IntelliJ需要JDK提供JVM和Java工具。理论上讲,JDK 6及其后的版本都能用,但是经验表明,至本书撰稿之时,还是JDK 8用起来更顺畅。

如果在Project SDK下拉框里看不到Java 1.8,说明你还没有安装过JDK 8。继续学习之前,请先访问https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,下载相应平台的安装包完成安装,然后重启IntelliJ使其生效。最后,按照前述步骤从头开始创建新项目。

言归正传,确认新项目设置如图5所示,然后单击Finish按钮。

如图6所示,IntelliJ随即创建一个名为Sandbox的新项目,并在默认的双面板视图里显示出来。反映在硬盘上,IntelliJ会在项目指定路径创建一个文件夹、一系列子文件夹以及对应的项目文件。

Kotlin应用开发初体验

图6 默认的双面板视图

图6中,左面板显示的是项目工具窗口。右面板现在空着。待会你会看到,这里会显示编辑器窗口,供你查看和编辑Kotlin代码文件。先来看左边的项目工具窗口。单击项目名称Sandbox左侧的展开箭头,可以展现项目包含的文件,如图7所示。

Kotlin应用开发初体验

图7 项目视图

在IntelliJ中,项目

既包含我们应用的所有源代码,也包含有相关的依赖和配置信息。项目可以分成一个或多个类似于子项目的模块。新建项目默认含有一个模块,对于简单的Kotlin项目来说,一个就够了。

如图7所示,Sandbox.iml文件包含项目模块的配置信息。.idea文件夹存放整个项目的设置文件,以及用户在IDE中和项目交互相关的设置文件(例如,当前编辑器打开了哪个文件)。上述文件都是系统自动生成的,现在不用管它们。

External Libraries项包含项目依赖库的信息。单击展开该项,可以看到,IntelliJ已自动为项目添加了Java 1.8以及KotlinJavaRuntime依赖库。

想了解更多有关IntelliJ项目结构的知识,请访问JetBrains文档网址:https://www.jetbrains.org/intellij/sdk/docs/basics/project_structure.html。

src文件夹用来存放为Sandbox项目创建的所有Kotlin代码文件。好了,是时候来创建并编辑首个Kotlin代码文件了。

1. 创建首个Kotlin文件

在项目工具窗口中,右击src文件夹。如图8所示,在弹出的菜单中,依次选择New和Kotlin File/Class菜单项。

Kotlin应用开发初体验

图8 新建一个Kotlin文件

在New Kotlin File/Class对话框中,在Name处输入文件名“Hello”,保持Kind处的File选项不变(见图9)。

Kotlin应用开发初体验

图9 给Kotlin文件命名

单击OK按钮确认。如图10所示,IntelliJ随即新建了src/Hello.kt这样一个项目文件,同时在IntelliJ右边窗口的编辑器里打开该文件。我们知道,.java后缀用于Java文件,.py后缀用于Python文件,同样,.kt后缀说明新建文件存放着Kotlin代码。

Kotlin应用开发初体验

图10 编辑器中的Hello.kt空文件

现在,可以开始编写Kotlin代码了。在Hello.kt编辑器中,动动手,输入代码清单1-1所示的代码。

注意,本文中所有需要读者输入的代码都显示为粗体。

代码清单1-1 “Hello,World!”Kotlin语言版(Hello.kt)

fun main(args: Array) {
 println("Hello, world!")
}

不太明白刚刚输入的代码?不要担心,之后你一定能自然、流利地读写Kotlin代码。现在只要大致知道是输出“Hello,World!”字符串就可以了。

代码清单1-1中的代码定义了一个main新函数。函数实际就是一组可以稍后运行的代码指令。

对于Kotlin语言来讲,main函数有特别的意义。它是应用程序开始启动的地方,又称为应用程序入口点。Sandbox或任何应用程序要能运行,都必须定义这样的入口点。

上述代码中的main函数仅包含一条指令(也叫语句):println("Hello, world!")。println()也是个函数,内置于

Kotlin标准库中。Sandbox应用程序一旦运行,println("Hello, world!")就会执行,IntelliJ随即在屏幕上输出圆括号中的Hello, world!字符串。

2.运行Kotlin文件

如图11所示,一旦输入完代码清单1-1中的代码,在第一行代码左侧,会出现一个绿色的运行按钮

Kotlin应用开发初体验

如果绿色运行按钮没出现,或者Hello.kt文件名或某段代码下方被打上了红色波浪线,则说明代码有误,请对照代码清单1-1仔细核对修改。另外,如果看到Kotlin的红蓝K标志也没问题,它相当于运行按钮。


Kotlin应用开发初体验

图11 运行按钮

代码无误的话,Hello, world!应用程序就可以运行了。如图12所示,单击运行按钮,选择Run ‘HelloKt’菜单项。这相当于告诉IntelliJ,你想看着应用程序运行起来。

Kotlin应用开发初体验

图12 运行Hello.kt文件

应用程序运行时,IntelliJ就一行一行执行花括号({})里的代码,同时在IDE界面底部显示两个新工具窗口,如图13所示。

Kotlin应用开发初体验

图13 运行和事件日志工具窗口

图13中,左边是运行工具窗口,又叫控制台(后续都这样称呼)。控制台显示IntelliJ执行应用程序时产生的各种信息,也包括应用程序本身的输出。就本例来说,你会看到控制台显示Hello, world!字符串,还会看到标志应用程序成功执行的语句:Process finished with exit code 0。这条语句会出现在控制台各种输出信息的最后。

macOS用户可能会看到红色的错误文本,指出JavaLauncherHelper有问题,如图13所示。不要担心。这是在macOS上安装Java运行时环境的方式所带来的副作用。要想移除它得费一番工夫,不过这个问题并没有什么影响,所以大可忽略它,继续操作。

图13中,右边是事件日志工具窗口。该窗口显示IntelliJ为应用程序执行所做工作的相关信息。显然,控制台才是我们要关心的地方,所以事件日志窗口后续不会再提起。(同理,你也不用管事件日志窗口在应用程序运行时是否打开。)要关闭事件日志窗口,单击右上角的隐藏按钮

Kotlin应用开发初体验

即可。

编译并运行Kotlin代码

从点选Run ‘HelloKt’菜单项至控制台输出Hello, World!结果只需很短的时间,但后台实际已忙活了不少事。

首先,IntelliJ使用kotlinc-jvm编译器编译Kotlin代码。具体来讲,就是把Kotlin代码转换为JVM语言:字节码。转换过程中,如有问题,kotlinc-jvm会报错并给出排错提示;一切顺利的话,IntelliJ就进入执行阶段。

在执行阶段,kotlinc-jvm生成的字节码会在JVM上执行。控制台随后会打印程序输出,例如,在JVM一条条执行指令时,调用println()函数会输出传入其中的文字。

字节码指令执行完毕后,JVM随即终止。IntelliJ在控制台显示终止状态,告诉用户执行成功完成或是有错并给出错误码。

这里要说的是,即使不能完全理解Kotlin的编译过程,也不妨碍你阅读本文及接下来的内容。

三、Kotlin REPL

就像拿张稿纸就某个计算一步步演算那样,有时候,你可能需要测试一小段Kotlin代码,看看运行结果如何。这在学习Kotlin语言时非常有用。幸运的是,IntelliJ就提供了这种工具,能够实现无须创建文件就快速测试代码。该工具叫作Kotlin REPL。稍后会解释REPL的含义,现在先打开它,看看能用它做些什么。

如图14所示,在IntelliJ中,选择Tools → Kotlin → Kotlin REPL打开Kotlin REPL工具窗口。

Kotlin应用开发初体验

图14 打开Kotlin REPL工具窗口

如图15所示,IntelliJ会在底部显示REPL窗口。

Kotlin应用开发初体验

图15 Kotlin REPL工具窗口

你可以在里面输入代码,就像使用代码编辑器一样,但有一点不同:REPL不用编译整个项目,就能立即给出结果。

在REPL中输入代码清单1-2所示的代码。

代码清单1-2 “Hello, Kotlin!”(REPL)

println("Hello, Kotlin!")

输入完成后,按Command-Return(Ctrl-Return)组合键在REPL中执行代码。如图16所示,很快,你就会在下面看到Hello, Kotlin!输出结果。

Kotlin应用开发初体验

图16 执行代码

REPL是英文单词read(读取)、evaluate(求值)、print(输出)和loop(循环)的首字母缩写。整个运转流程如下:在提示符下输入一段代码,然后单击REPL左侧的绿色运行按钮或按Command-Return(Ctrl-Return)组合键提交。REPL读取代码,代码求值(运行代码),输出

结果或副作用结果。运行完毕,REPL交回控制权,循环再次开始。

Kotlin之旅已然启航!你在本文学了不少内容,已为进一步掌握Kotlin编程打下基础。接下来可以继续跟着《Kotlin编程权威指南》的第2章(在图灵社区免费开放,点击阅读原文跳转),继续探索Kotlin语言的细节,学习如何使用变量、常量以及各种数据类型。

——本文内容节选自《Kotlin编程权威指南》

Kotlin应用开发初体验

它源自大名鼎鼎的Big Nerd Ranch训练营培训讲义,该训练营已经为Google、Facebook、微软等行业巨头培养了众多专业人才。通过搭建各种示例项目,在实践中掌握Kotlin。

补充内容

四、深入学习:为什么要用IntelliJ

任何文本编辑器都可以用来编写Kotlin代码,不过,我们推荐使用IntelliJ,尤其是在学习这门语言的时候。如同凭借文字处理软件的拼写和语法检查功能,能更轻松地写出规范的文章一样,IntelliJ也更便于编写规范的Kotlin代码。这主要体现在以下几个方面。

  • 借助语法高亮、内容提示和代码自动补全等功能,你可以编写出语法和语义正确的代码。
  • 借助应用程序运行时的断点调试和实时代码步进,你可以边运行边调试代码。
  • 借助重构快捷命令(如重命名、导出常量)以及清理缩进和空行的代码格式化功能,你可以重构现有代码。

而且,由于Kotlin和IntelliJ都出自JetBrains公司,它们之间的集成设计更为细致周全,为用户带来了愉快的开发体验。另外,Android Studio基于IntelliJ开发,所以使用IntelliJ时学会的快捷操作和工具都可以直接运用。

五、深入学习:面向JVM

JVM本质上是个软件,它知道如何执行字节码指令。“面向JVM”就是把Kotlin代码编译或转译成Java字节码,以实现在JVM上运行,如图17所示。

Kotlin应用开发初体验

图17 编译和执行流程

Windows平台也好,macOS平台也罢,它们都有各自的指令集。JVM搭起了字节码与不同软硬件平台间的桥梁,读取字节码并调用平台特有的与之匹配的指令。显然,不同软硬件平台有不同版本的JVM。这样一来,Kotlin开发人员就可以编写平台独立的程序代码,无论什么系统平台,都可实现一次编写,然后编译成字节码,在不同设备上执行。

既然能转换成JVM可以执行的字节码,Kotlin也就是JVM语言。作为首门JVM语言,Java最为知名。在后来者,如Scala和Kotlin语言中,开发人员扬长避短,已消除了“前辈”Java的一些弊端。

不过,Kotlin并未局限于JVM。如今,Kotlin已能编译成JavaScript,甚至能脱离虚拟机层,直接编译成可以在Windows、Linux和macOS平台上运行的原生二进制代码。

六、挑战练习:使用REPL研究Kotlin中的算数运算符

《Kotlin编程权威指南》很多章最后都配有挑战练习。请独立完成它们,以加深对Kotlin语言的理解,积累更多经验。

使用REPL研究Kotlin中的+、-、*、/以及%这些算数运算符是如何工作的。例如,在REPL中,尝试输入(9+12)*2。结果符合预期吗?

还想深入研究的话,可以看看https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.math/index.html网页列出的Kotlin标准库里的数学函数,在REPL里做做演练。例如,试试minOf (94, -99),求出最小值。

——

【图灵教育】

阅读改变世界,阅读塑造人生

让我们站在巨人的肩膀上,解锁更多IT技能!


分享到:


相關文章: