我使用Kotlin已经有一段时间了,我偶然发现只有高阶函数才能成为内联函数,这是合理的,但我想问的问题是,它是否总是必要的
- 我们应该用一个lambda来构造所有的高阶函数吗? 参数,还是内联函数?
- 如果我们应该或不应该,为什么我们应该和为什么不应该?
- 我知道一种尺码不能适合所有人,那么哪种情况适合内联,哪种不适合?
我使用Kotlin已经有一段时间了,我偶然发现只有高阶函数才能成为内联函数,这是合理的,但我想问的问题是,它是否总是必要的
回答您的问题:
AD.1 与编程中的一切一样,这要视情况而定.如果它是一个简单、简短的函数,为什么不呢?如果是一个很长的复杂函数,我就不会这么做.(阅读缺点)此外,JIT(Just-in-Time)执行内联,您可以在它执行此优化时进行阅读,它应该有助于您做出正确的决策.
AD.2 如果您正在处理内存有限的环境或代码大小令人担忧的情况,我会避免内联.编译时间太长?此外,也要避免这种优化.
AD.3
这一切都是关于权衡,你可以接受. 一般来说,内联的优点是:
Performance Optimization
-在Kotlin中,lambda表达式创建一个新的匿名类,这会产生内存和运行时开销.通过将高阶函数标记为内联,您建议编译器直接在调用点替换该函数的代码,从而避免创建额外的类和函数调用开销.当在循环中或在性能关键型代码中频繁调用这些函数时,尤其有用.Control Over Function Inlining
-更多地控制函数应该在何时何地内联,然而,它并不能保证函数总是内联的.内联也有一些缺点:
Code Size Increase
-内联函数会导致代码大小增加,因为函数的代码在每个调用点都会被复制.