入门指南
基本语法
定义包
包的声明必须在源文件的顶部:
package my.demo
import java.util.*
java 不同包不必和目录结构匹配: 源文件可以放到文件系统的任意位置。
函数定义
如下是一个有两个Int类型的参数和Int返回值的例子:
fun sum(a: Int, b: Int): Int {
return a + b
}
用表达式作为函数体编译器可以自动推断返回类型:
fun sum(a: Int, b: Int) = a + b
无返回值的函数:
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
这时Unit 返回类型可以省略:
fun printSum(a: Int, b: Int) {
print(a + b)
}
局部变量定义
一次性赋值(只读)局部变量:
val a: Int = 1
val b = 1 // Int类型推断
val c: Int // 没有初始化的变量必须指定类型
c = 1 // 明确的指定值
可变变量:
var x = 5 // `Int` 类型是推断的
x += 1
注释
就像Java 和Javascript 一样,Kotlin 支持行注释和块注释。
// 如下是一个行释
/* This is a block comment on multiple lines. */
和Java不同,Kotlin 的块注释支持嵌套。
字符串模板
fun main(args: Array<String>) {
if (args.size == 0) return
print("First argument: ${args[0]}")
}
条件表达式
fun max(a: Int, b: Int): Int {
if (a > b)
return a else
return b
}
将 if 作为表达式: fun max(a: Int, b: Int) = if (a > b) a else b
可空值和空值检查
可能为空值的引用类型必须明确的标识为可空
如果str不是一个有效的数字串则返回 null
fun parseInt(str: String): Int? {
// ...
}
返回可空类型值的函数:
fun main(args: Array<String>) {
if (args.size < 2) {
print("Two integers expected")
return
}
val x = parseInt(args[0])
val y = parseInt(args[1])
// 直接使用`x * y` 会出错,因为它们可能包含空值
if (x != null && y != null) {
// 空值检查操作后x和y自动转换为不可空类型
print(x * y)
}
}
或
if (x == null) {
print("Wrong number format in ‘${args[0]}‘")
return
}
if (y == null) {
print("Wrong number format in ‘${args[1]}‘")
return
}
// x and y are automatically cast to non-nullable after null check
print(x * y)
类型检查和自动类型转换
is 操作符用于检查一个表达式是否是指定类型的实例. 如果一个不可变局部变量或属性经过检查后是目标类型就不需要再做 明确的类型转换了: