【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
在 Kotlin 中,使用函數當參數傳遞,記得將此函數前面加入 inline 關鍵字,它能有效減少函數呼叫所造成的資源消耗。若沒有使用 Inline 內聯此函數,會導致每個函數都被實體化 (Instance) 出來。
inline fun showGreeting(name: String, msg: String, greeting: (String, String) -> String) {
println(greeting(name, msg))
}
fun main() {
showGreeting("HKT", "今天過得好嗎?") { name: String, msg: String ->
"哈囉~ $name, $msg"
}
}
...
...
...
public static final void main() {
String name$iv = "HKT";
String msg$iv = "今天過得好嗎?";
int $i$f$showGreeting = false;
int var5 = false;
String var4 = "哈囉~ " + name$iv + ", " + msg$iv;
System.out.println(var4);
}
...
...
...
可以看到原本呼叫函數要執行的內容,被複製到呼叫函數的地方。這就是加入 inline 的效果。當函數被 inline
修飾時,原本函數呼叫的內容會被複製到呼叫函數的地方。這樣能夠節省實體化所帶來的效能開銷。
...
...
...
public static final void main() {
showGreeting("HKT", "今天過得好嗎?", (Function2)null.INSTANCE);
}
...
...
...
反編譯可以看到,在沒有加入 inline 關鍵字的情況下,會出現 INSTANCE。
在沒有使用 inline
關鍵字的情況下,反編譯後的程式碼中會出現 INSTANCE
。這顯示了沒有使用 inline
所造成的效能差異,因為程式碼並未在呼叫處被複製,而是保持了原本的呼叫方式,導致實體化的成本增加。