一. 具名函数
在定义时指定名字的函数,和java方法类似。具体写法如下
函数.png
例如:
private fun myFunction(a: Int, b: String): String {
return "Welcome to Kotlin's World! $a, $b"
}
上面函数可以简化成单表达式函数
,如下
private fun myFunction(a: Int, b: String): String =
"Welcome to Kotlin's World! $a, $b"
二. 匿名函数
顾名思义,就是在定义时不取名字的函数,区别于具名函数
。
1. 写法:
在{}
中定义函数体,通过()
调用,比如
// 定义
{
"Welcome to Kotlin's World!"
}
// 调用
println({
"Welcome to Kotlin's World!"
}())
匿名函数还可以带参数,写法如下
// 定义
{a: Int, b: String ->
"Welcome to SimVillage, $a!(copyright $b)"
}
// 调用
println({a: Int, b: String ->
"Welcome to SimVillage, $a!(copyright $b)"
}(2019, "Benny"))
注意,上面匿名函数的定义部分不能单独存在,匿名函数必须在调用它的函数中定义。
注意,匿名函数不支持参数默认值和具名函数参数。
2. 函数类型:
: Int
表示变量存储的是哪种数据类型;
: () -> String
表示变量存储的哪种类型(此处为无参,返回类型为String)的函数(如果没有返回值,用Unit
代替String
),比如
// 定义变量
val value: Int = 10
// 同样,定义函数类型变量
val myFunction: () -> String = {
// code block
}
()
中可以带参数,比如
val myFunction: (a: Int, b: String) -> String = { a: Int, b: String ->
"Welcome to Kotlin's World, $b! In the year of $a"
}
上面带参匿名函数可以精简成下面的写法,其中a,b是对应Int和String类型的参数名
val myFunction: (Int, String) -> String = { a, b ->
"Welcome to Kotlin's World, $b! In the year of $a"
}
如果匿名函数只带一个参数,可以用it
关键字替代参数名,比如
val myFunction: (String) -> String = {
"Welcome to Kotlin's World, $it!"
}
上面的例子中通过定义变量myFunction
接收匿名函数,调用时直接使用变量就可以,写法和具名函数一样,比如
println(myFunction("Benny"))
3. 隐式返回
匿名函数一般不需要return
关键字来返回数据,那么为了返回数据,匿名函数会隐式返回函数体最后一行语句的结果。