高阶函数
高阶函数就是方法(函数)的参数或者返回是一个函数
内联函数
内联函数就是在编译时直接将函数内容直接复制粘贴到调用处
普通函数并不需要,如果在普通函数强行加上inline,编辑器会提醒
只有高阶函数中才需要inline去做内联优化
原因是虽然inline关键字理论上可以减少一个栈帧层级(栈帧在虚拟机栈)但是一般函数没有必要
高阶函数:如下,block: (String)本质上是使用匿名类的实现方式,这样就会造成额外的内存开销。为了解决这个问题,kotlin引入inline内联功能,将Lambda表达式带来的性能开销消除。
kotlinfun requestInfo() { highFuc("inline") { str -> println(str) } } fun highFuc(name: String, block: (String) -> Unit) { block(name) }
kotlin
fun requestInfo() {
highFuc("inline") { str ->
println(str)
}
}
//注意:这里添加了inline关键字
inline fun highFuc(name: String, block: (String) -> Unit) {
block(name)
}
转换成java之后:
java
public final void requestInfo() {
String name$iv = "inline";
System.out.println(name$iv);
}
- inline:编译时直接将函数内容直接复制粘贴到调用处。
- noinline:当函数被inline标记时,使用noinline可以使函数参数不被内联。
- crossinline: 允许内联函数里的函数类型参数可以被间接调用,但是不能在Lambda表达式中使用全局return返回