变量
变量声明
kotlin使用val
或var
声明变量。
val
用于声明一个不可变变量,它指向的对象本身可以更改而它指向的对象是谁不能更改,这表明之后不能再给它重新赋值。
var
用于声明一个可变变量,它指向的对象本身与它指向的对象是谁都可以被修改,这表明之后可以给它重新赋值。
声明的变量类型可以被自动推断,也可以手动指定,例如:
val x = 5 // 自动推断类型为Int
val y : Byte = 5 // 手动指定类型为Byte
数字
就整数而言,kotlin有这些整数类型:
变量类型 | 大小/bit | 最小 | 最大 |
---|---|---|---|
Byte |
8 | -128 | 127 |
Short |
16 | -32768 | 32767 |
Int |
32 | -2^{31} | 2^{31} - 1 |
Long |
64 | -2^{63} | 2^{63} - 1 |
定义变量时,可以在数字后添加后缀L
指定这个变量为Long
,如果数字足够大,也会定义为Long
。
val a : Long = 100
val a = 100L
kotlin还提供float
和double
两种浮点数。float
为32比特,而double
为64比特。
在定义浮点数时,默认定义为double
。可以在数字后添加后缀f
指定其为浮点数。
一个较小的数字类型在赋值时不能隐式转换为较大的数字类型。例如,下面的代码是非法的:
val a = 100
val b : Long = a // a不会被隐式转化为Long
需要采用显式类型转换。显式类型转换为数字的toXXX()方法。
val a = 100
val b : Long = a.toLong()
在进行运算的时候,较小的数字类型会被隐式的转化为较大的数字类型。
函数
函数声明
一个函数由如下的结构声明:
fun functionname(arg1: Type, arg2: Type, ..., argn: Type): ReturnType {
// some codes
}
返回值类型不填默认为Unit
,表示无意义返回值。
程序入口
一个kotlin程序由main()
函数开始执行:
fun main() {
// some codes
}
不定长参数
vararg
关键字用于定义不定长的参数。
fun myAverage(vararg numbers: Double): Double {
var sum = 0.0
for (number in numbers) {
sum += number
}
return sum / numbers.size
}
匿名函数
匿名函数由下定义:
val func: (Type, Type) -> (ReturnType) = {arg1, arg2 -> ReturnValue}
高阶函数
函数的参数或返回值可以是一个函数。
函数作为参数
一个函数作为参数被传入时,需要在其前面加::
表示传入的函数做参数。
val a = listOf(1, 2, 3)
a.forEach(::println) // 这会换行输出1 2 3
函数作为返回值
一个函数作为返回值时,这个函数应该这样定义:
fun fun1(fun1's args): (fun2's args) -> fun2的返回值 {
// some codes
}
例如:
fun returnFun(): (Int, Int) -> Int {
return {1, j -> (i + j)} // 这是一个匿名函数
}
闭包函数
闭包(closure)就是能够读取其他函数内部变量的函数。
fun counter(): () -> Int {
var count = 0
return {
count++
count
}
}
val c = counter()
println(c()) // 1
println(c()) // 2
println(c()) // 3