我们可以写有或没有的代码let
如下。
var str = "Hello World"
str.let { println("$it!!") }
Run Code Online (Sandbox Code Playgroud)
或者
var str = "Hello World"
println("$str!!")
Run Code Online (Sandbox Code Playgroud)
什么是let
?的实际用途。内存效率更高还是可读性更高?
Dea*_*ean 26
let
是 Kotlin 的Scope函数之一,它允许您在对象的上下文中执行代码块。在这种情况下,上下文对象是str
。有5个人:let
,run
,with
,apply
,和also
。它们的用途范围从但不限于初始化和映射。
它们都非常相似,但它们在上下文对象的引用方式和返回值方面有所不同。在let
上下文对象由it
关键字而不是关键字引用的情况下this
。返回值是从 lambda 代码块返回的任何值。其他范围函数如apply
将返回上下文对象。
因为let
返回任何 lambda 块的计算结果,它最适合执行某种映射:
var upperStr = str.let { it.toUpperCase()}
Run Code Online (Sandbox Code Playgroud)
apply是更适合您正在做的事情的功能。
要回答关于哪种代码更可取的问题,这实际上取决于您使用 scope 函数的目的。在上述情况下,没有理由使用let
. 如果您使用的是 IntelliJ,它会发出警告,说明对 的调用let
是多余的。这里的可读性是一个偏好问题,并且可能是首选。
let
当您希望使用safe call
运算符对对象执行空安全操作时,该函数很有用。执行此操作?.
时,let
仅当对象不为空时才会执行代码块。使用 let 的另一个原因是,如果您需要为操作引入新变量,但又想将它们限制在 let 块的范围内。对于所有作用域函数都是如此,所以我重申它let
最适合用于映射操作。
编辑:该let
功能不应产生额外费用。通常我们希望 lambda/Code-block 被编译为一个Function
对象,但对于inline
Kotlin 中的函数而言,情况并非如此,编译器将为其发出与您给出的第二个代码示例不同的代码。有关更多信息,请参阅文档。
Art*_*nev 15
您可以检查可为空类型的一种用法
var str: String? = null
str?.let { println("$it!!") }
Run Code Online (Sandbox Code Playgroud)
它是平等的
if (str != null) {
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)
在 Java 中,但更短更有用
归档时间: |
|
查看次数: |
20492 次 |
最近记录: |