Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。
Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
Kotlin 已包含在每个IntelliJ IDEA与 Android Studio版本中了。
可下载并安装这两个 IDE 之一来开始使用 Kotlin。
package top.ygang.kotlindemo
fun main(args: Array<String>){
println("Hello World!");
}
在之前,无论我们创建的是Kotlin源文件还是Kotlin类文件,都是在默认的包下进行的,也就是直接在kotlin/src
目录创建的。
但是有些时候,我们可能希望将一些模块按功能进行归类,而不是所有的kt文件都挤在一起,这个时候我们就需要用到包了,也就是在kotlin/src
目录中创建的子目录。
所有不直接在默认包目录中的kt文件,必须在顶部声明所属的包,比如Test.kt
放在kotlin/com/test
这个包中,因此顶部必须使用package关键字进行包声明package com.test
。
当我们使用其他包中kt文件定义的类或函数时,会直接提示未解析的引用,这是因为默认情况下只有同包内的内容可以相互使用,而现在我们使用的是其他包中的内容,我们需要先进行导入操作import com.test.User
、import com.test.myFunc
这样,我们在导入之后就可以正常使用了,当然,如果一个包中定义的内容太多,我们需要大量使用,也可以使用*
一次性导入全部内容import com.test.*
package org.example
fun printMessage() { /*……*/ }
class Message { /*……*/ }
kotlin源文件不需要相匹配的目录和包,源文件可以放在任何文件目录。
源文件所有内容(无论是类还是函数)都包含在该包内。 所以上例中 printMessage()
的全名是 org.example.printMessage
, 而 Message
的全名是 org.example.Message
。
如果没有指定包,默认为default
包。
有多个包会默认导入到每个 Kotlin 文件中:
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
根据目标平台还会导入额外的包:
java.lang.*
kotlin.jvm.*
kotlin.js.*
除了默认导入之外,每个文件可以包含它自己的导入(import
)指令。
可以导入一个单个名称:
import org.example.Message // 现在 Message 可以不用限定符访问
也可以导入一个作用域下的所有内容:包、类、对象等:
import org.example.* // “org.example”中的一切都可访问
如果出现名字冲突,可以使用 as
关键字在本地重命名冲突项来消歧义:
import org.example.Message // Message 可访问
import org.test.Message as TestMessage // TestMessage 代表“org.test.Message”
关键字 import
并不仅限于导入类;也可用它来导入其他声明:
Kotlin 应用程序的入口点是 main
函数:
fun main() {
println("Hello world!")
}
main
的另一种形式接受可变数量的 String
参数:
fun main(args: Array<String>) {
println(args.contentToString())
}
// 单行注释
/**
* 文档注释
*/
/*
* 多行注释
*/
在纯 Kotlin 项目中,推荐的目录结构遵循省略了公共根包的包结构。例如,如果项目中的所有代码都位于 org.example.kotlin
包及其子包中,那么 org.example.kotlin
包的文件应该直接放在源代码根目录下,而 org.example.kotlin.network.socket
中的文件应该放在源代码根目录下的 network/socket
子目录中。
如果 Kotlin 文件包含单个类或接口(以及可能相关的顶层声明),那么文件名应该与该类的名称相同,并追加 .kt
扩展名。 这适用于所有类型的类和接口。 如果文件包含多个类或只包含顶层声明, 那么选择一个描述该文件所包含内容的名称,并以此命名该文件。 使用首字母大写的驼峰风格(也称为 Pascal 风格), 例如 ProcessDeclarations.kt
。
在多平台项目中,平台特有的源代码集中包含顶层声明的文件应具有与该源代码集名称相关联的后缀。 例如:
对于公共源代码集,包含顶层声明的文件不应该有后缀。 例如,commonMain/kotlin/Platform.kt
.
在 Kotlin 中,包名与类名的命名规则非常简单:
org.example.project
)。 通常不鼓励使用多个词的名称,但是如果确实需要使用多个词,可以将它们连接在一起或使用驼峰风格(org.example.myProject
)。