Kotlin函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )相关的知识,希望对你有一定的参考价值。
文章目录
一、 函数参数为 Lambda 表达式
在 定义函数 时 , 函数的参数 可以是 函数类型的变量 ,
可以传递一个 匿名函数 作为 函数参数 ;
匿名函数 就是 Lambda 表达式 ;
代码示例 : 在下面的代码中 ,
- 函数参数 :
studentDoSomething
函数的 第三个参数为 action: (String, Int) -> String
,
其参数类型为 (String, Int) -> String
, 是一个 函数类型 ;
- 函数类型变量 :
在 main
函数中 , 定义函数类型变量 actionFun
, 之后 该变量会作为函数参数传递给函数 ,
同时使用了 匿名函数 , 为该函数类型变量 actionFun
赋值 ;
- 匿名函数类型自动推断 :
在该 匿名函数中 , 使用了 自动类型推断 , 在函数体中的参数列表 ,
声明了 完整的 参数名:参数类型 , name: String, age: Int ->
;
- 函数变量作函数参数 :
在最后 , 将 函数类型 变量 actionFun
传递给了 studentDoSomething
函数 , 作为其第三个参数使用 ;
fun main()
// 定义函数类型变量, 之后作为函数参数传递给函数
val actionFun = name: String, age: Int ->
"student $name $age years old, say hello"
// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作
studentDoSomething("Tom", 18, actionFun);
fun studentDoSomething(name: String, age: Int,
action: (String, Int) -> String)
val act = action(name, age);
println(act)
执行结果 :
student Tom 18 years old, say hello
二、Lambda 表达式作为参数的简略写法
1、Lambda 表达式作为唯一参数的简略写法
如果 Lambda 表达式 作为 函数参数 , 并且 该参数是 唯一参数 , 那么 Lambda 表达式外面的圆括号可以省略 ;
代码示例 :
fun main()
// 调用 doSomething 函数, 传入 Lambda 表达式 / 匿名函数
doSomething(
"Hello World"
)
fun doSomething(action: () -> String)
val act = action();
println(act)
此时将鼠标移动到 Lambda 表达式 上 , 也就是匿名函数中 , 会提示
Lambda argument should be moved out of parentheses
参数应该移出圆括号
Kotlin 建议我们移除 Lambda 表达式 外面的圆括号 ;
修改后的代码示例 :
fun main()
// 调用 doSomething 函数, 传入 Lambda 表达式 / 匿名函数
doSomething
"Hello World"
fun doSomething(action: () -> String)
val act = action();
println(act)
执行结果 :
2、Lambda 表达式作为最后一个参数的简略写法
如果 Lambda 表达式 作为 函数参数 , 并且 该参数是 若干参数的最后一个参数 , 那么 Lambda 表达式可以提到括号外面 ;
在上一个章节的如下代码 , 可以直接 将 匿名函数 作为函数参数进行传递 , 不必使用 函数类型 变量名作为参数 ,
fun main()
// 定义函数类型变量, 之后作为函数参数传递给函数
val actionFun = name: String, age: Int ->
"student $name $age years old, say hello"
// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作
studentDoSomething("Tom", 18, actionFun);
直接使用匿名函数作为函数参数 的效果 :
fun main()
// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作
studentDoSomething("Tom", 18, name: String, age: Int ->
"student $name $age years old, say hello"
)
匿名函数 , 也就是 Lambda 表达式 作为最后一个参数 , 可以提取到括号外面 , 代码效果如下 :
fun main()
// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作
studentDoSomething("Tom", 18) name: String, age: Int ->
"student $name $age years old, say hello"
最终的简化后的代码示例 :
fun main()
// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作
studentDoSomething("Tom", 18) name: String, age: Int ->
"student $name $age years old, say hello"
fun studentDoSomething(name: String, age: Int,
action: (String, Int) -> String)
val act = action(name, age);
println(act)
执行结果 :
student Tom 18 years old, say hello
以上是关于Kotlin函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin函数 ⑦ ( 内联函数 | Lambda 表达式弊端 | “ 内联 “ 机制避免内存开销 - 将使用 Lambda 表达式作为参数的函数定义为内联函数 | 内联函数本质 - 宏替换 )
Kotlin空安全 ⑥ ( 先决条件函数 | checkNotNull 函数 | require 函数 | requireNotNull 函数 | error 函数 | assert 函数 )
Kotlin函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )