9.5 Kotlin过程性编程

虽然Kotlin是一种纯粹的OOP语言,但它也支持过程性编程。这意味着不同于Java和Scala,可在类外定义函数和变量(正如你在本书前面看到的,使用Scala REPL时,可以不将函数和变量放在类中,但使用独立编译器scala时,必须将它们放在类中)。

编写程序时,如果不使用Kotlin的REPL交互式shell,将使用Kotlin编译器;而使用这个编译器来编译源代码时,可将函数和属性放在源代码文件的顶层。本章前面都是这样做的:

  1. fun function1 {
  2. println("function1 is running...")
  3. }
  4. var property1: String = "default value of property1"

然而,不能将可执行的代码放在源代码的顶层;可执行的代码必须位于函数中。要创建可使用命令javakotlin执行的JVM应用程序,必须定义一个main()函数。当函数具有如下签名时,Kotlin编译器将把它编译成静态方法,使其可用作JVM入口函数:

  1. fun main(args : Array<String>) {
  2. // 可执行的代码……
  3. function1()
  4. println(property1)
  5. }

鉴于JVM平台总是使用类,Kotlin编译器在幕后将源代码编译成类文件,以充当源文件中代码的包装器。对于编译得到的类,这样给它命名:在源代码文件名后面加上Kt;因此,如果源代码文件名为CoolProject.kt且首行为package com.example,则生成的类的全限定名为com.example.CoolProjectKt

请注意,Kotlin REPL不会自动执行方法main()。要运行这个示例,请将这些源代码保存到名为procedural_programming.kt的文件中,再在命令提示符(Windows)或终端中执行如下命令:

  1. kotlinc-jvm procedural_programming.kt
  2. kotlin Procedural_programmingKt

这些命令的作用如下。

  • 编译器kotlinc-jvm将procedural_programming.kt编译为与JVM兼容的文件Procedural_programmingKt.class,其中包含Java字节码。
  • 前面说过,这个类文件中的类名为Procedural_programmingKt
  • 命令kotlin是JVM命令java的快捷方式,它确保将Kotlin运行时库添加到类路径中。由于这个类包含入口函数main,因此JVM能够运行这个应用程序。