语法
[访问控制符] fun [函数名] ( [参数列表...] ) : [返回值类型]{
[函数体]
}
Kotlin 中 使用 关键字 fun 声明 函数
访问控制符 默认为 public
fun fun1(value:String):Boolean{
if (value=="JOEL"){
return true
}else{
return false
}
}
如上代码,声明 函数 fun1 需要一个参数 value 返回 Boolean 类型的值。
参数
Kotlin 中函数的参数 用 name:type 的形式定义,多个参数之间使用 逗号 分割,每个参数必须显示的指定数据类型
fun fun2(p1: String, p2: Int) {
println("$p1 $p2")
}
函数中的参数是不可变的,不能在函数体中给参数重新赋值。
参数默认值
Kotlin中可以给参数指定默认值,来减少函数重载
fun main() {
fun2("JOEL",1)
fun2("JOEL",1,3.0f)
}
fun fun2(p1: String, p2: Int, p3: Float = 1.0f) {
println("$p1 $p2 $p3")
}
第2行 输出结果: JOEL 1 1.0
第3行 输出结果: JOEL 1 3
有默认值的参数,当调用不传值时,使用默认值。否则使用传的值。
当有默认值的参数,不位于参数列表的末尾,调用函数时位于默认值参数后面的参数,需要使用 具名参数(name=value)传值。例如:
fun main() {
fun3("JOEL" ,p3 = 3.0f)
}
fun fun3(p1: String, p2: Int=0, p3: Float) {
println("$p1 $p2 $p3")
}
输出结果: JOEL 0 3.0
如上代码,函数 fun3 第2个参数 p2 默认值为0。在调用函数时,不给参数p2传值时,参数p3就需要显示的指定参数名。
可变数量参数
Kotlin中使用 修饰符 vararg 标记可变数量参数,通常位于参数列表的末尾,参数具有数组类型。
fun main() {
fun4("J","O","E","L")
}
fun fun4(vararg p0: String){
p0.forEach {
println(it)
}
}
输出:J
O
E
L
一个函数只能有 一个 参数可以定义为可变数量参数
当可变数量参数不位于参数列表末尾时,其后的参数使用 具名参数 (name=value)传值
伸展(spread)操作符
调用具有可变数量参数的函数时,可以一个一个传值,也可以 传数组,在数组前面加上 *
fun main() {
val sArr = arrayOf("K","O","T")
fun4(*sArr)
}
fun fun4(vararg p0: String){
p0.forEach {
println(it)
}
}
输出: K
O
T
单表达式函数
当函数体只有一行代码时,可以省略 花括号 ,使用 = 连接 函数 和 函数体。
fun fun4(a: Int, b: Int): Int = a + b
fun fun5(a: Int, b: Int) = a + b
fun fun6(a: Int, b: Int): Unit = println(a + b)
当函数的返回类型不为Unit 时。可以省略返回类型,Kotlin 根据 函数体 自动推导返回类型。
返回值
当函数无返回值时,他的返回类型是Unit。返回Unit的函数,返回类型 和 返回值 可以省略。
单表达式函数,可以省略返回类型
有函数体的函数,必须显示声明返回类型和返回值。
fun fun7(vararg p0: String) {
p0.forEach {
println(it)
}
}
fun fun8(vararg p0: String): String {
var str = ""
p0.forEach {
str += it
}
return str
总结
1,使用 fun 关键字 声明函数
2,函数参数 以 name:type 的形式定义,多个参数使用 逗号 分割
3,参数可以指定默认值,位于默认值参数之后的参数,使用 具名参数(name=value)的形式调用
4,使用关键字 vararg 定义可变数量的参数
5,调用具有 vararg 修饰参数 的函数时,可以使用 伸展操作符 * 传值
6,单表达式函数,可以省略返回类型和函数体,使用 = 连接 函数 和 函数体
7,返回Unit的函数,可以省略返回值和返回类型。