kotlin现在是Android 开发的主流语言,因为代码简洁,特别是一些内联函数的使用,跟java的比起来,代码量少却可以实现同样的功能。
接下来就来讲讲kotlin中常见的内联函数,他们在功能上,使用上都大同小异。分别是let函数、with函数、run函数、apply函数、also函数。一个一个来讲解。
从功能返回值上看,let、with、run归为一类,apply和also为一类
一、函数结构为
public inline fun T.let(block: (T) -> R): R = block(this)
它表示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.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
) { - 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