> 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表达式的实现方式以及内联等特性同样适用于匿名函数
网友评论