kotlin 之几个常见的内联函数(一)

kotlin现在是Android 开发的主流语言,因为代码简洁,特别是一些内联函数的使用,跟java的比起来,代码量少却可以实现同样的功能。

接下来就来讲讲kotlin中常见的内联函数,他们在功能上,使用上都大同小异。分别是let函数、with函数、run函数、apply函数、also函数。一个一个来讲解。

从功能返回值上看,let、with、run归为一类,apply和also为一类

Let函数

一、函数结构为

public inline fun  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.let(block: (T) -> R): R = block(this)

四、函数结构分析

从源码let函数的结构来看它是只有一个lambda函数块block作为参数的函数,调用T类型对象的let函数,则该对象为函数的参数。在函数块内可以通过 it 指代该对象。返回值为函数块的最后一行或指定return表达式。

五、举个栗子

fun main(args: Array) {
    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

你可能感兴趣的:(kotlin,android,内联函数,let,let作用)