本文 摘自《Kotlin编程权威指南》html
本章,你将学习使用IntelliJ IDEA开发首个Kotlin应用。借此,你将熟悉开发环境,建立Kotlin新项目,编写并运行Kotlin代码,以及查看输出结果。本章建立的是一个沙盒项目,可供你演练代码,以学习理解本书中的各类新概念。java
IntelliJ IDEA是一套Kotlin集成开发环境。JetBrains公司建立了Kotlin语言并打造出了这套开发工具。开始学习前,请先访问JetBrains公司网站www.jetbrains.com/idea/downlo…,下载IntelliJ IDEA社区开发版软件(见图1-1)。编程
图1-1 下载IntelliJ IDEA社区开发版软件api
下载完毕后,请参考www.jetbrains.com/help/idea/i…网页,完成对应平台IntelliJ IDEA开发工具的安装与配置。oracle
IntelliJ IDEA简称IntelliJ,能帮助开发者编写风格良好的Kotlin代码。利用其内建工具,运行、调试、检查以及重构代码的整个开发过程能无缝衔接,一鼓作气。有鉴于此,咱们推荐使用IntelliJ作Kotlin开发。若想进一步了解使用IntelliJ作Kotlin开发的理由,请阅读1.4节。jvm
恭喜你,Kotlin语言及强大的开发环境都有了,接下来只剩一件事要作:学会流畅运用Kotlin语言。做为首个练手任务,咱们来建立一个Kotlin项目。编程语言
启动IntelliJ。如图1-2所示,映入眼帘的是IntelliJ IDEA的欢迎界面。编辑器
图1-2 欢迎界面ide
(若非首次安装使用,IntelliJ会直接打开上一个项目。要回到欢迎界面,选择File → Close Project关闭项目便可。)函数
单击Create New Project选项,会看到如图1-3所示的建立新项目对话框。
图1-3 建立新项目对话框
在建立新项目对话框中,选择左侧的Kotlin选项,而后选择右边出现的Kotlin/JVM选项,结果如图1-4所示。
图1-4 建立一个Kotlin/JVM项目
除了Kotlin,IntelliJ还支持Java、Python、Scala以及Groovy等其余编程语言。选择Kotlin/JVM就是告诉IntelliJ你要用Kotlin编程。更确切地讲,就是要编写面向而且在Java虚拟机上运行的Kotlin代码。顺便提一下,Kotlin还有个优点:内置的工具链支持编写能在不一样操做系统和平台上运行的Kotlin代码。
(从如今起,提到Java虚拟机,本书都以Java开发社区经常使用的JVM来替代。1.5节还会介绍更多有关面向JVM的知识。)
单击Next按钮继续。你会看到新项目设置界面,如图1-5所示。输入“Sandbox”做为项目名称,IntelliJ会自动给出默认项目路径。若有须要,能够单击右侧的…按钮自定义项目路径。在Project SDK的下拉框中点选Java 1.8,这样,新项目就关联上了JDK 8。
图1-5 给新项目命名
你可能会问,编写Kotlin程序为何须要JDK?答案就是,为了把Kotlin代码转译为字节码(稍后详述),IntelliJ须要JDK提供JVM和Java工具。理论上讲,JDK 6及其后的版本都能用,可是经验代表,至本书撰稿之时,仍是JDK 8用起来更顺畅。
若是在Project SDK下拉框里看不到Java 1.8,说明你尚未安装过JDK 8。继续学习以前,请先访问www.oracle.com/technetwork…,下载相应平台的安装包完成安装,而后重启IntelliJ使其生效。最后,按照前述步骤从头开始建立新项目。
言归正传,确认新项目设置如图1-5所示,而后单击Finish按钮。
如图1-6所示,IntelliJ随即建立一个名为Sandbox的新项目,并在默认的双面板视图里显示出来。反映在硬盘上,IntelliJ会在项目指定路径建立一个文件夹、一系列子文件夹以及对应的项目文件。
图1-6 默认的双面板视图
图1-6中,左面板显示的是项目工具窗口。右面板如今空着。待会你会看到,这里会显示编辑器窗口,供你查看和编辑Kotlin代码文件。先来看左边的项目工具窗口。单击项目名称Sandbox左侧的展开箭头,能够展示项目包含的文件,如图1-7所示。
图1-7 项目视图
在IntelliJ中,项目既包含咱们应用的全部源代码,也包含有相关的依赖和配置信息。项目能够分红一个或多个相似于子项目的模块。新建项目默认含有一个模块,对于简单的Kotlin项目来讲,一个就够了。
如图1-7所示,Sandbox.iml文件包含项目模块的配置信息。.idea文件夹存放整个项目的设置文件,以及用户在IDE中和项目交互相关的设置文件(例如,当前编辑器打开了哪一个文件)。上述文件都是系统自动生成的,如今不用管它们。
External Libraries项包含项目依赖库的信息。单击展开该项,能够看到,IntelliJ已自动为项目添加了Java 1.8以及KotlinJavaRuntime依赖库。
(想了解更多有关IntelliJ项目结构的知识,请访问JetBrains文档网址:www.jetbrains.org/intellij/sd…。)
src文件夹用来存放为Sandbox项目建立的全部Kotlin代码文件。好了,是时候来建立并编辑首个Kotlin代码文件了。
在项目工具窗口中,右击src文件夹。如图1-8所示,在弹出的菜单中,依次选择New和Kotlin File/Class菜单项。
图1-8 新建一个Kotlin文件
在New Kotlin File/Class对话框中,在Name处输入文件名“Hello”,保持Kind处的File选项不变(见图1-9)。
图1-9 给Kotlin文件命名
单击OK按钮确认。如图1-10所示,IntelliJ随即新建了src/Hello.kt这样一个项目文件,同时在IntelliJ右边窗口的编辑器里打开该文件。咱们知道,.java后缀用于Java文件,.py后缀用于Python文件,一样,.kt后缀说明新建文件存放着Kotlin代码。
图1-10 编辑器中的Hello.kt空文件
如今,能够开始编写Kotlin代码了。在Hello.kt编辑器中,动动手,输入代码清单1-1所示的代码。(注意,本书中全部须要读者输入的代码都显示为粗体。)
代码清单1-1 “Hello,World!”Kotlin语言版(Hello.kt)
fun main(args: Array<String>) { println("Hello, world!") }
不太明白刚刚输入的代码?不要担忧,学完本书,你必定能天然、流利地读写Kotlin代码。如今只要大体知道是输出“Hello,World!”字符串就能够了。
代码清单1-1中的代码定义了一个main
新函数。函数实际就是一组能够稍后运行的代码指令。咱们将在第4章中具体学习如何定义并使用函数。
对于Kotlin语言来说,main
函数有特别的意义。它是应用程序开始启动的地方,又称为应用程序入口点。Sandbox或任何应用程序要能运行,都必须定义这样的入口点。本书编写的全部应用程序都从main
函数开始启动。
上述代码中的main
函数仅包含一条指令(也叫语句):println("Hello, world!")
。println()
也是个函数,内置于Kotlin标准库中。Sandbox应用程序一旦运行,println("Hello, world!")
就会执行,IntelliJ随即在屏幕上输出圆括号中的Hello, world!
字符串。
如图1-11所示,一旦输入完代码清单1-1中的代码,在第一行代码左侧,会出现一个绿色的运行按钮 。(若是绿色运行按钮没出现,或者Hello.kt文件名或某段代码下方被打上了红色波浪线,则说明代码有误,请对照代码清单1-1仔细核对修改。另外,若是看到Kotlin的红蓝K标志也没问题,它至关于运行按钮。)
图1-11 运行按钮
代码无误的话,Hello, world!应用程序就能够运行了。如图1-12所示,单击运行按钮,选择Run ‘HelloKt’菜单项。这至关于告诉IntelliJ,你想看着应用程序运行起来。
图1-12 运行Hello.kt文件
应用程序运行时,IntelliJ就一行一行执行花括号({}
)里的代码,同时在IDE界面底部显示两个新工具窗口,如图1-13所示。
图1-13 运行和事件日志工具窗口
图1-13中,左边是运行工具窗口,又叫控制台(后续都这样称呼)。控制台显示IntelliJ执行应用程序时产生的各类信息,也包括应用程序自己的输出。就本例来讲,你会看到控制台显示Hello, world!
字符串,还会看到标志应用程序成功执行的语句:Process finished with exit code 0
。这条语句会出如今控制台各类输出信息的最后。你知道就好,本书后续截图将再也不包括此信息。
(macOS用户可能会看到红色的错误文本,指出JavaLauncherHelper
有问题,如图1-13所示。不要担忧。这是在macOS上安装Java运行时环境的方式所带来的反作用。要想移除它得费一番工夫,不过这个问题并无什么影响,因此你大可忽略它,继续操做。)
图1-13中,右边是事件日志工具窗口。该窗口显示IntelliJ为应用程序执行所作工做的相关信息。显然,控制台才是咱们要关心的地方,因此事件日志窗口后续不会再提起。(同理,你也不用管事件日志窗口在应用程序运行时是否打开。)要关闭事件日志窗口,单击右上角的隐藏按钮 便可。
编译并运行Kotlin代码
从点选Run ‘HelloKt’菜单项至控制台输出Hello, World!
结果只需很短的时间,但后台实际已忙活了很多事。
首先,IntelliJ使用kotlinc-jvm
编译器编译Kotlin代码。具体来说,就是把Kotlin代码转换为JVM语言:字节码。转换过程当中,若有问题,kotlinc-jvm
会报错并给出排错提示;一切顺利的话,IntelliJ就进入执行阶段。
在执行阶段,kotlinc-jvm
生成的字节码会在JVM上执行。控制台随后会打印程序输出,例如,在JVM一条条执行指令时,调用println()
函数会输出传入其中的文字。
字节码指令执行完毕后,JVM随即终止。IntelliJ在控制台显示终止状态,告诉用户执行成功完成或是有错并给出错误码。
第2章会深刻探讨字节码的相关知识,不过,这里要说的是,即便不能彻底理解Kotlin的编译过程,也不妨碍你阅读本书。
就像拿张稿纸就某个计算一步步演算那样,有时候,你可能须要测试一小段Kotlin代码,看看运行结果如何。这在学习Kotlin语言时很是有用。幸运的是,IntelliJ就提供了这种工具,可以实现无须建立文件就快速测试代码。该工具叫做Kotlin REPL。稍后会解释REPL的含义,如今先打开它,看看能用它作些什么。
如图1-14所示,在IntelliJ中,选择Tools → Kotlin → Kotlin REPL打开Kotlin REPL工具窗口。
图1-14 打开Kotlin REPL工具窗口
如图1-15所示,IntelliJ会在底部显示REPL窗口。
图1-15 Kotlin REPL工具窗口
你能够在里面输入代码,就像使用代码编辑器同样,但有一点不一样:REPL不用编译整个项目,就能当即给出结果。
在REPL中输入代码清单1-2所示的代码。
代码清单1-2 “Hello, Kotlin!”(REPL)
println("Hello, Kotlin!")
输入完成后,按Command-Return(Ctrl-Return)组合键在REPL中执行代码。如图1-16所示,很快,你就会在下面看到Hello, Kotlin!
输出结果。
图1-16 执行代码
REPL是英文单词read(读取)、evaluate(求值)、print(输出)和loop(循环)的首字母缩写。整个运转流程以下:在提示符下输入一段代码,而后单击REPL左侧的绿色运行按钮或按Command-Return(Ctrl-Return)组合键提交。REPL读取代码,代码求值(运行代码),输出结果或反作用结果。运行完毕,REPL交回控制权,循环再次开始。
Kotlin之旅已然启航!你在本章学了很多内容,已为进一步掌握Kotlin编程打下基础。下一章,你将开始探索Kotlin语言的细节,学习如何使用变量、常量以及各类数据类型。
任何文本编辑器均可以用来编写Kotlin代码,不过,咱们推荐使用IntelliJ,尤为是在学习这门语言的时候。如同凭借文字处理软件的拼写和语法检查功能,能更轻松地写出规范的文章同样,IntelliJ也更便于编写规范的Kotlin代码。这主要体如今如下几个方面。
并且,因为Kotlin和IntelliJ都出自JetBrains公司,它们之间的集成设计更为细致周全,为用户带来了愉快的开发体验。另外,Android Studio基于IntelliJ开发,因此使用IntelliJ时学会的快捷操做和工具均可以直接运用。
JVM本质上是个软件,它知道如何执行字节码指令。“面向JVM”就是把Kotlin代码编译或转译成Java字节码,以实如今JVM上运行,如图1-17所示。
图1-17 编译和执行流程
Windows平台也好,macOS平台也罢,它们都有各自的指令集。JVM搭起了字节码与不一样软硬件平台间的桥梁,读取字节码并调用平台特有的与之匹配的指令。显然,不一样软硬件平台有不一样版本的JVM。这样一来,Kotlin开发人员就能够编写平台独立的程序代码,不管什么系统平台,均可实现一次编写,而后编译成字节码,在不一样设备上执行。
既然能转换成JVM能够执行的字节码,Kotlin也就是JVM语言。做为首门JVM语言,Java最为知名。在后来者,如Scala和Kotlin语言中,开发人员扬长避短,已消除了“前辈”Java的一些弊端。
不过,Kotlin并未局限于JVM。本书撰写之际,Kotlin已能编译成JavaScript,甚至能脱离虚拟机层,直接编译成能够在Windows、Linux和macOS平台上运行的原生二进制代码。
本书不少章最后都配有挑战练习。请独立完成它们,以加深对Kotlin语言的理解,积累更多经验。
使用REPL研究Kotlin中的+
、-
、*
、/
以及%
这些算数运算符是如何工做的。例如,在REPL中,尝试输入(9+12)*2
。结果符合预期吗?
还想深刻研究的话,能够看看kotlinlang.org/api/latest/…网页列出的Kotlin标准库里的数学函数,在REPL里作作演练。例如,试试minOf (94, -99)
,求出最小值。