Kotlin学习笔记_函数篇(1)_具名函数和匿名函数

一. 具名函数

在定义时指定名字的函数,和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关键字来返回数据,那么为了返回数据,匿名函数会隐式返回函数体最后一行语句的结果。

你可能感兴趣的:(Kotlin学习笔记_函数篇(1)_具名函数和匿名函数)