kotlin现在是Android 开发的主流语言,因为代码简洁,特别是一些内联函数的使用,跟java的比起来,代码量少却可以实现同样的功能。
接下来就来讲讲kotlin中常见的内联函数,他们在功能上,使用上都大同小异。分别是let函数、with函数、run函数、apply函数、also函数。一个一个来讲解。
从功能返回值上看,let、with、run归为一类,apply和also为一类
Let函数
一、函数结构为
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
R 是返回类型
T 是输入类型或者调用对象的类型
它表示T类型在调用let后将变为R类型。
二、一般使用结构:
object.let{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}
//另一种用途 判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
it.todo()
三、let 函数底层的inline扩展函数+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
四、函数结构分析
从源码let函数的结构来看它是只有一个lambda函数块block作为参数的函数,调用T类型对象的let函数,则该对象为函数的参数。在函数块内可以通过 it 指代该对象。返回值为函数块的最后一行或指定return表达式。
五、举个栗子
fun main(args: Array<String>) {
val result = "testLet".let {
println(it.length)
1000
}
println(result)
}
代码分析:let函数体里面最后一行为改函数的返回值,也就是result = 1000,结果将返回1000
六、kotlin 与 java的对比
同样上面的例子,我们看一下两种语言各自的写法,对比一下代码量,是否简洁等。
//kotlin
fun main(args: Array<String>) {
val result = "testLet".let {
println(it.length)
1000
}
println(result)
}
//java
public final class LetFunctionKt {
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
String var2 = "testLet";
int var4 = var2.length();
System.out.println(var4);
int result = 1000;
System.out.println(result);
}
}
七、使用场景
(1)、最常用的场景就是使用let函数处理需要针对一个可null的对象统一做判空处理。但对象不为空时才会执行方法体,否则不会执行。
(2)、在有限范围内引入局部变量以提高代码的可读性。
以上就是let内联函数的作用及使用场景,下一篇将with函数,that's all