let在Kotlin中使用多个嵌套是一个好习惯,还是应该引入一个局部变量?有没有任何开销?
webView?.let { webview ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webview.setLayerType(View.LAYER_TYPE_HARDWARE, null)
} else {
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
}
webview.webViewClient = WebViewClient()
webview.settings.let { settings ->
settings.javaScriptEnabled = true
settings.setSupportZoom(false)
settings.builtInZoomControls = false
settings.displayZoomControls = false
settings.loadsImagesAutomatically = true
}
}
Run Code Online (Sandbox Code Playgroud)
zsm*_*b13 11
由于let内联(参见:什么是内联,也是官方文档),其成本与自己声明局部变量完全相同.如果您通过安全呼叫使用它,它还会添加一个空检查,您也必须手动执行此操作.
所以使用它基本上没有任何开销,只要您的代码足够清晰,只要您愿意就可以随意使用它.
例如,代码如下:
webview.settings.let { settings ->
settings.javaScriptEnabled = true
settings.setSupportZoom(false)
}
Run Code Online (Sandbox Code Playgroud)
...将大致转换为与此Java代码等效的字节码:
Settings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(false);
Run Code Online (Sandbox Code Playgroud)
除了settings可能会被称为通用之类的东西var10000,但除此之外.重点是没有创建任何函数实例,也没有let调用函数或类似的东西,因此没有开销.
对于任何未来的问题,您可以使用Kotlin插件的字节码查看器和反编译器自己检查.
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |