美文网首页
Kotlin之lambda、inline、扩展函数与匿名函数

Kotlin之lambda、inline、扩展函数与匿名函数

作者: 钦_79f7 | 来源:发表于2019-12-20 17:03 被阅读0次

    > inline 内联函数及其场景

    inline只能提高带有lambda参数的函数的性能

    ==好处==:

    • 节约函数调用的开销;
    • 节约为lambda创建匿名类的开销;
    • 节约创建lambda实例对象的开销。

    ==内联函数的原则==:尽量使你的内联函数总是最小的

    内联函数的限制

    鉴于内联函数的运作方式:将作为参数的lambda表达式的函数体会被直接替换到最终生成的代码中。

    那么:

    • 如果lambda参数被调用,这样就很容易被内联;
    • 如果lambda参数在某个地方呗保存了起来,以便后续使用,这样的lambda表达式是不能被内联的,因为必须要有一个包含这些代码的对象存在。

    > break效果的实现:局部返回

    ==规则==:

    • return 总是从最近的使用fun关键字声明的函数返回

    故:

    • forEach{} 中在lambda代码块中使用 return,返回的是forEach函数的调用处,而不是lambda代码块处(即forEach的迭代体),即默认是非局部返回
      • 要想实现类似break的效果(即:局部返回),即return lambda代码块处,则需要使用标签forEach label@{ return@label}(label可以是任意字符) 或者 forEach { return@forEach}(默认以函数名作为label)
      • 针对lambda中实现局部返回,也可以采用匿名函数的方式,来替代lambda。forEach(fun (it){ return })
    • 匿名函数,是lambda的另一种语法形式,关于lambda表达式的实现方式以及内联等特性同样适用于匿名函数

    相关文章

      网友评论

          本文标题:Kotlin之lambda、inline、扩展函数与匿名函数

          本文链接:https://www.haomeiwen.com/subject/jduinctx.html