Kotlin - 什么时候和什么时候不喜欢内联函数,为什么?

标签 kotlin inline

我使用Kotlin有一段时间了,我发现只有高阶函数才能成为内联函数,这是合理的,但我想问的问题是它是否总是必要的

  1. 我们应该用一个 lambda 来构造所有高阶函数吗 参数,内联函数?
  2. 我们是否应该或不应该,为什么我们应该以及为什么我们不应该?
  3. 我知道一种方法并不适合所有情况,那么哪种情况适合内联,哪种情况不适合?

最佳答案

回答您的问题:

公元1年 与编程中的所有事情一样,这取决于情况。如果它是一个简单、简短的函数,为什么不呢?如果是一个很长的复杂函数那么我不会这样做。 (阅读缺点)此外,JIT(Just-In-Time)执行内联,您可以阅读它何时执行此优化,它应该可以帮助您做出正确的决定。

公元2年 如果您正在处理有限的内存环境或需要考虑代码大小的情况,我会避免内联。编译时间太长?另外,请避免这种优化。

公元3年

  • 小方法
  • 频繁调用(例如,从循环调用的方法)
  • 仅从一个位置调用方法(不存在因多个调用站点而导致代码大小增加的风险)

这都是关于你可以接受的权衡。 一般来说,内联的优点是:

  • 性能优化 - 在 Kotlin 中,lambda 表达式会创建一个新的匿名类,这会产生内存和运行时开销。通过将高阶函数标记为内联,您建议编译器应该直接在调用站点替换该函数的代码,从而避免创建额外的类和函数调用开销。当这些函数在循环内或性能关键型代码中频繁调用时特别有用。
  • 控制函数内联 - 对函数内联的时间和位置进行更多控制,但是,它不能保证函数始终内联。

内联也有一些缺点:

  • 代码大小增加 - 内联函数可能会导致代码大小增加,因为函数的代码会在每个调用站点进行复制。
  • 编译时间增加
  • 复杂性增加 - 影响代码可读性和可维护性

关于Kotlin - 什么时候和什么时候不喜欢内联函数,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77008583/

相关文章:

c++ - 是否有任何编译器忽略有关默认内联函数的 C++ 标准?

java - Spring Boot @ControllerAdvice 异常处理程序未触发

java - 状态栏中的通知图标在少数 Android 设备中没有变化

android - 如何每分钟更新一个 Android 应用小部件

kotlin - 如何在 Kotlin 中对整数数组的每个项目求平方

html - EDM 模板中的顶部对齐 <td>

c# - 为什么是 str = str.Replace().Replace();比 str = str.Replace(); 快str = str.替换()?

c# - 我可以将三元运算符与两个函数一起使用,每个函数都返回 void 吗?

c++ - 静态 constexpr 变量是否在 C++ 中内联?

android - 如何检测NFC标签移除事件?