theme: channing-cyan
为什么要内联函数
因为: Kotlin为了书写简单,所以引入了lambda。
但是: lambda会造成性能消耗。
所以: 引入了内联函数来解决这个问题。
如何证明lambda书写简单
我们来实现个需求,diff一下有lambda和无lambda的代码便知。
需求: 实现一个函数回调,回调一个String给我。
Java版本(无lambda):
``` // 首先需要定义一个回调 public interface Action { void click(String fuck); }
// 然后定义这个方法,参数就是回调的接口 public void func(Action action) { String str = "hello"; action.click(str); }
// 最后调用它 public static void main(String[] args) { // 这里需要创建一个匿名类 func(new Action() { @Override public void click(String fuck) { System.out.println(fuck); } }); } ```
然后我们来看kotlin版: ``` // 直接定义方法,参数是个表达式函数 fun func(action: (String) -> Unit) { val str = "hello" action.invoke(str) }
// 调用 fun main() { // 参数直接传入lambda就完事,it是lambda的默认参数 func { println(it) } } ```
没有对比就没有伤害,java费了十牛三虎之力写了好几行,kotlin短短几行就实现了,这就是lambda的优点: 简洁省事。其实说白了就是:不用创建对象了。
虽然可读性差了点,管它呢,反正看不懂也是别人的事,别人读不懂才能凸显我的不可替代性。
事实证明,lambda确实大大简化了代码的书写过程,我们不用敲创建对象的代码了。
那么,lambda有什么缺点呢?
lambda的缺点
lambda的最大缺点就是性能损耗!
让我们反编译上述kotlin代码来看: ``` // 这个参数已经被替换成Function1了,这个Function1是kotlin中定义的一个接口 public static final void func(@NotNull Function1 action) { Intrinsics.che