第 3 章 第一个Kotlin程序

第 3 章 第一个Kotlin程序

本章以HelloWorld作为切入点,介绍如何编写和运行Kotlin程序代码。

编写和运行Kotlin程序有多种方式,总的来说可以分为:

  1. 交互式方式运行
  2. 编译为字节码文件方式运行

交互式方式运行可以采用REPL。编译为字节码方式运行就是使用IntelliJ IDEA或Eclipse创建一个项目,通过这些工具可以编译和运行Kotlin源文件。另外还可以使用文本编辑工具编写Kotlin源文件,再使用Kotlin编译器提供的kotlinc命令在命令提示行中编译Kotlin源程序,然后再通过kotlin命令或JDK提供的java命令运行。

本章介绍如何使用这些工具实现HelloWorld程序。

3.1 使用REPL

REPL是英文Read-Eval-Print Loop缩写,直译为“读取-求值-输出”,它指代一种简单的交互式运行编程环境。REPL对于学习一门新的编程语言具有很大的帮助,因为它能立刻对初学者做出回应。许多编程语言可以使用REPL研究算法以及进行调试。

启动REPL可以通过Kotlin编译器提供的kotlinc命令或IntelliJ IDEA工具中选择Tools→Kotlin→Kotlin REPL菜单。打开命令提示行输入kotlinc命令,如图3-1所示启动REPL,Kotlin REPL提供一些前面带有冒号(:)的管理指令,例如“:quit”指令是退出REPL,“:help”指令是帮助。

图3-1 在命令提示行中启动REPL

在REPL窗口中可以输入Kotlin代码,键入Enter键后马上会运行并输出结果,测试代码如下:

>>> 1+1                                           ①
2                                                 ②
>>> val str = "Hello, world."                     ③
>>> println(str)                                  ④
Hello, world.                                     ⑤
>>>


“>>>”后面的Kotlin代码,见代码第①行、第③行和第④行都是代码,而代码第②行、第⑤行是运行结果。

3.2 使用IntelliJ IDEA实现

上一节介绍了如何以交互式方式编写和运行Kotlin程序代码,交互式方式在很多情况下适合学习Kotlin语言阶段,但是如果要使用Kotlin语言开发实际项目,交互式方式就不适合了。此时,需要创建项目,在项目中创建文件,编译文件,运行文件。

首先介绍如何使用IntelliJ IDEA创建Kotlin项目以编写和运行HelloWorld程序。

3.2.1 创建项目

首先在IntelliJ IDEA中通过项目(Project)管理Kotlin源代码文件,因此需要先创建一个Kotlin项目,然后在项目中创建一个Kotlin源代码文件。

IntelliJ IDEA创建项目步骤是:打开如图3-2所示IntelliJ IDEA的欢迎界面,单击Create New Project打开如图3-3所示的对话框。一般第一次启动Xcode就可以看到这个界面,如果没有,也可以通过选择菜单File→New→Project打开。

{%}

图3-2 IntelliJ IDEA欢迎界面

图3-3 选择项目类型

由于要编写的HelloWorld程序属于基于Java虚拟机的Kotlin项目,因此需要创建Kotlin/JVM类型项目,在图3-3中选择Java中Kotlin/JVM(如图3-4(a)所示),或者选择Kotlin中Kotlin/JVM(如图3-4(b)所示)都可以创建Kotlin/JVM类型项目。

图3-4 选择Kotlin/JVM类型项目

如果选择了如图3-4(b)所示界面Kotlin/JVM类型项目,然后单击Next按钮进入如图3-5所示的界面。在Project name中输入项目名,本例中是项目ch3.2,Project location中选择保存项目路径,选择合适的Project SDK后,单击Finish按钮创建项目,如图3-6所示。

图3-5 输入项目命名

图3-6 项目创建完成

3.2.2 创建Kotlin源代码文件

项目创建完成后,需要创建一个Kotlin源代码文件执行控制台输出操作。选择刚刚创建的项目,选中src文件夹,然后选择菜单File →New→Kotlin File/Class,打开新建Kotlin文件或类对话框,如图3-7所示在对话框中Name文本框中输入HelloWorld,Kind(类型)下拉框中选择File(文件),然后单击OK按钮创建文件,如图3-8所示,在左边的项目文件管理窗口中可以看到刚刚创建的HelloWorld.kt源代码文件。

{%}

图3-7 新建Kotlin文件或类

图3-8 HelloWorld.kt源代码文件

3.2.3 编写代码

要想让Kotlin源代码文件能够运行起来,需要main函数,它是为程序的入口,与C++语言中的main函数类似,都不属于任何的类,称为顶层函数(top-level function)。但是与Java不同,Java中程序的入口也是main函数,而但Java中所有的函数都必须在某个类中定义,main函数也不例外。

编写代码如下:

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

如果是Java实现同样功能的代码如下:

public class HelloWorld {

          public static void main(String[] args) {
              System.out.print("Hello, world!");
          }
}

3.2.4 运行程序

程序编写完成可以运行了。如果是第一次运行,则需要在左边的项目文件管理窗口中选择HelloWorld.kt文件,右击菜单中选择Run 'HelloWorldKt'运行,运行结果如图3-9所示在左下面的控制台窗口输出Hello, world!字符串。

图3-9 运行结果

注意 如果已经运行过程一次,也可直接单击工具栏中的Run {%}按钮,或选择菜单Run→Run 'HelloWorldKt',或使用快捷键Ctrl+F10,都可以就运行上次的程序了。

3.3 使用IntelliJ IDEA+Gradle实现

Gradle是一个基于Apache Ant和Apache Maven的项目自动化建构工具。它不是用传统的XML语言描述,而是使用一种基于Groovy的特定领域语言(DSL)来描述的。IntelliJ IDEA工具内置对Gradle的支持,可以通过IntelliJ IDEA+Gradle构建Java和Kotlin项目。

首先,看看如何在IntelliJ IDEA中创建Gradle+Kotlin/JVM项目步骤与创建Kotlin/JVM项目类似,首先参考3.2.1节打开图3-3所示的选择项目类型对话框,选择Gradle中的Kotlin(Java),如图3-10所示。

图3-10 选择Kotlin/JVM类型项目

在图3-10所示界面,单击Next按钮进入Gradle配置项目名对话框,在各个项目中输入相应内容,如图3-11所示,其中GroupId是公司或组织域名倒置;ArtifactId是项目名称,GroupId可以省略,但是ArtifactId不能省略;Version是该项目的版本号,用于自己项目版本管理。

图3-11 Gradle配置项目名称

在图3-11所示界面,单击Next按钮进入Gradle项目配置对话框,如图3-12所示,其中各个选项说明如下:

  • Use auto-import。是否开启自动导入功能,如果开启,当修改Gradle脚本文件时,后会自动检测变化并对项目进行刷新。
  • Create separate module per source set。每个模块都有独立的源代码目录结构。
  • Stroe generated project files externally。项目生成文件是否不进行版本管理。在IntelliJ IDEA项目中会有一些项目生成文件,如.ipr、.iml和.iws等文件。在团队开发时,往往会使用代码版本控制软件,这些文件是不应该提交服务器进行版本控制的。开启此项后,这些自动生成文件不会被提交服务器进行版本管理。
  • Use default gradle wrapper (recommended)。使用默认的Gradle Wrapper,它会通过网络自动更新,这是推荐选项。
  • Use local gradle distribution。使用本地的Gradle Wrapper,选择此项需要指定本地Gradle Wrapper的位置。

图3-12 配置Gradle项目

在图3-12所示界面,单击Next按钮进入项目保存界面,输入文件名并选择保存文件路径,单击Finish按钮创建项目完成,如图3-13所示,其中项目下的/src/main目录是源代码根目录,一般而言main下面的java目录放置java源代码, kotlin目录放置Kotlin源代码文件,resource放置资源文件(图片、声音和配置等文件)。

图3-13 项目创建完成

IntelliJ IDEA+Gradle项目编写代码和运行程序都与IntelliJ IDEA项目没有区别,这里不再赘述。

3.4 使用Eclipse+Kotlin插件实现

本节介绍如何通过Eclipse+Kotlin插件实现编写和运行HelloWorld程序。

3.4.1 创建项目

在Eclipse中也是通过项目管理Kotlin源代码文件的,因此需要先创建一个Kotlin项目,然后在项目中创建一个Kotlin源代码文件。

Eclipse创建项目步骤是:打开Eclipse,选择菜单File→New→Project,打开选择项目向导对话框,如图3-14所示,选择Kotlin下面的Kotlin Project。单击Next按钮,进入如图3-15所示的对话框,在这里可以输入项目名和保存项目,输入完成后,单击Finish按钮创建项目。项目创建完成后,回到如图3-16所示的Eclipse主界面。

{%}

图3-14 选择项目向导对话框

{%}

图3-15 输入项目名和保存项目

图3-16 项目创建完成

3.4.2 创建Kotlin源代码文件

项目创建完成后,需要创建一个Kotlin源代码文件执行控制台输出操作。选择刚刚创建的项目,选中项目中src文件夹,然后选择菜单File →New→Other,打开创建文件向导对话框,如图3-17所示,选择Kotlin下面的Kotlin File。单击Next按钮,进入如图3-18所示的保存文件对话框,其中Source folder文本框是文件保存文件夹,默认是src文件夹;Package文本框该文件所在的包,有关包的概念将在第4章详细介绍。在这里可以输入文件名,输入完成后,单击Finish按钮创建文件,文件创建完成后,回到如图3-19所示的Eclipse主界面。

{%}

图3-17 选择创建文件向导对话框

{%}

图3-18 保存文件

图3-19 文件创建完成

3.4.3 运行程序

修改刚刚生成的HelloWorld.kt源文件,代码如图3-20所示。

图3-20 编写HelloWorld.kt源文件

程序编写完成可以运行了。如果是第一次运行,则需要选择运行方法,具体步骤是:选中文件,选择菜单Run→Run As→Kotlin Application,这样就会运行HelloWorld程序了。如果已经运行过程一次,就不需要这么麻烦了,直接单击工具栏中的Run 按钮,或选择菜单Run→Run,或使用快捷键Ctrl+F11,都可以就运行上次的程序了。运行结果如图3-21所示,Hello, world!字符串到下面的控制台。

图3-21 运行结果

3.5 文本编辑工具+Kotlin编译器实现

如果不想使用IDE工具(笔者建议出学者通过这种方式学习Kotlin),那么文本编辑工具+Kotlin编译器对于初学者而言是一个不错的选择,这种方式可以使初学者了解到Kotlin程序的编译和运行过程,通过自己在编辑器中敲入所有代码,可以帮助熟悉常用函数和类,能快速掌握Kotlin语法。

注意 在2.5.2节介绍过Sublime Text与Kotlin编译器集成过程,但本节介绍编译和运行过程完全是手动的,这样可以帮助读者了解Kotlin程序编译和运行过程。

3.5.1 编写代码

首先使用任何文本编辑工具创建一个文件,然后将文件保存为HelloWorld.kt。接着在HelloWorld.kt文件中编写如下代码:

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

3.5.2 编译程序

编译程序需要在命令行中使用Kotlin编译器的kotlinc指令编写,打开命令行,进入到源文件所在的目录,然后执行如下指令:

kotlinc HelloWorld.kt

如果没有错误提示,说明编译成功。编译成功后会当前目录下面生成HelloWorldKt.class字节码文件,如图3-22所示。

{%}

图3-22 编译源文件

另外,为了方便运行和管理,往往会将Kotlin字节码文件和Kotlin运行时打包成一个独立的jar文件,需要执行如下指令:

kotlinc HelloWorld.kt -include-runtime -d HelloWorld.jar

其中-include-runtime参数是设置jar文件中包含Kotlin运行时库,-d参数是指定编译结果输出目的地,这个目的地可以目录或jar打包文件。编译成功后会当前目录下面生成HelloWorld.jar打包文件,如图3-23所示。打开HelloWorld.jar文件,如图3-24所示,kotlin和org两个文件夹事实上就是Kotlin运行时库,META-INF文件夹是jar打包时生成的,用来存放包中文件清单等信息。

图3-23 编译并打包jar文件

提示 一般在发布java字节码文件时,会把字节码文件(class文件)打包成jar文件,jar文件是一种基于zip结构的压缩文件,可以使用JDK中的jar命令解压,或者是任何支持解压zip格式的软件打开或解压,如图3-24所示,使用7z(http://www.7-zip.org)软件打开。使用jar文件有很多好处,首先文件是经过压缩占用空间小,其次是多个文件(字节码、资源和配置文件)被打包成一个文件方便管理。

{%}

图3-24 使用7z软件打开jar文件

3.5.3 运行程序

3.3.2节编译的结果可能是Kotlin字节码文件或包含Kotlin运行时库的jar文件。这两种不同的文件运行方式不同,但本质上都是使用java命令运行的。

  1. 运行Kotlin字节码文件

    Kotlin字节码文件最简单的方式是使用Kotlin编译器提供的kotlin命令,指令如下:

    kotlin HelloWorldKt
    
    

    运行过程如图3-25所示。

    {%}

    图3-25 kotlin命令运行字节码文件

  2. 运行包含Kotlin运行时库的jar文件

    运行包含Kotlin运行时库的jar文件,需要使用指令如下:

    java -jar HelloWorld.jar
    
    

    运行过程如图3-26所示。

    {%}

    图3-26 运行包含Kotlin运行时库的jar文件

3.6 代码解释

至此只是介绍了如何编写、编译和运行HelloWorld程序,还没有对如下的HelloWorld代码进行解释。

fun main(args: Array<String>) {    ①
    println("Hello, world!")       ②
}

从代码中可见,Kotlin实现HelloWorld的方式比Java、C和C++等语言要简单得多,下面详细解释一下代码。

代码第①行的fun 关键字是声明一个函数,main是函数名,args 是参数;Array<String>是参数类型,该类型是字符串数组类型。代码第②行是println函数是在控制台输出字符串,并且后面跟有一个换行符。类似还有print函数,该函数后面没有换行符。

给Java程序员的提示 Kotlin中有一些函数不属于任何类,这些函数是顶层函数。上述示例中println函数对应Java中的System.out.println函数,print函数对应Java中的System.out.print函数。

本章小结

本章通过一个HelloWorld示例,介绍如何使用IntelliJ IDEA和IntelliJ IDEA+Gradle工具实现该示例具体过程。此外,还介绍了其他的一些工具:Eclipse+Kotlin和文本编辑器+Kotlin编译器实现过程。

目录

  • 目录
  • 简介
  • 前言
  • 第 1 章 开篇综述
  • 第 2 章 开发环境搭建
  • 第 3 章 第一个Kotlin程序
  • 第 4 章 Kotlin语法基础
  • 第 5 章 Kotlin编码规范
  • 第 6 章 数据类型
  • 第 7 章 字符串
  • 第 8 章 运算符
  • 第 9 章 程序流程控制
  • 第 10 章 函数
  • 第 11 章 面向对象编程
  • 第 12 章 继承与多态
  • 第 13 章 抽象类与接口
  • 第 14 章 函数式编程基石——高阶函数和Lambda表达式
  • 第 15 章 泛型
  • 第 16 章 数据容器——数组和集合
  • 第 17 章 Kotlin中函数式编程API
  • 第 18 章 异常处理
  • 第 19 章 线程
  • 第 20 章 协程
  • 第 21 章 Kotlin与Java混合编程
  • 第 22 章 Kotlin I/O与文件管理
  • 第 23 章 网络编程
  • 第 24 章 Kotlin与Java Swing图形用户界面编程
  • 第 25 章 轻量级SQL框架——Exposed
  • 第 26 章 反射
  • 第 27 章 注解
  • 第 28 章 项目实战1:开发PetStore宠物商店项目
  • 第 29 章 项目实战2:开发Kotlin版QQ2006聊天工具