我使用Kotlin有一段时间了,我发现只有高阶函数才能成为内联函数,这是合理的,但我想问的问题是它是否总是必要的
- 我们应该用一个 lambda 来构造所有高阶函数吗 参数,内联函数?
- 我们是否应该或不应该,为什么我们应该以及为什么我们不应该?
- 我知道一种方法并不适合所有情况,那么哪种情况适合内联,哪种情况不适合?
最佳答案
回答您的问题:
公元1年 与编程中的所有事情一样,这取决于情况。如果它是一个简单、简短的函数,为什么不呢?如果是一个很长的复杂函数那么我不会这样做。 (阅读缺点)此外,JIT(Just-In-Time)执行内联,您可以阅读它何时执行此优化,它应该可以帮助您做出正确的决定。
公元2年 如果您正在处理有限的内存环境或需要考虑代码大小的情况,我会避免内联。编译时间太长?另外,请避免这种优化。
公元3年
- 小方法
- 频繁调用(例如,从循环调用的方法)
- 仅从一个位置调用方法(不存在因多个调用站点而导致代码大小增加的风险)
这都是关于你可以接受的权衡。 一般来说,内联的优点是:
性能优化
- 在 Kotlin 中,lambda 表达式会创建一个新的匿名类,这会产生内存和运行时开销。通过将高阶函数标记为内联,您建议编译器应该直接在调用站点替换该函数的代码,从而避免创建额外的类和函数调用开销。当这些函数在循环内或性能关键型代码中频繁调用时特别有用。控制函数内联
- 对函数内联的时间和位置进行更多控制,但是,它不能保证函数始终内联。
内联也有一些缺点:
代码大小增加
- 内联函数可能会导致代码大小增加,因为函数的代码会在每个调用站点进行复制。- 编译时间增加
- 复杂性增加 - 影响代码可读性和可维护性
关于Kotlin - 什么时候和什么时候不喜欢内联函数,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77008583/