内联函数产生原因和原理


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值