• 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类型。

    二、一般使用结构:

    1. object.let{
    2. it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
    3. ...
    4. }
    5. //另一种用途 判断object为null的操作
    6. object?.let{//表示object不为null的条件下,才会去执行let函数体
    7. it.todo()

    三、let 函数底层的inline扩展函数+lambda结构

    1. @kotlin.internal.InlineOnly
    2. public inline fun T.let(block: (T) -> R): R = block(this)

    四、函数结构分析

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

    五、举个栗子

    1. fun main(args: Array<String>) {
    2. val result = "testLet".let {
    3. println(it.length)
    4. 1000
    5. }
    6. println(result)
    7. }
    8. //代码分析:let函数体里面最后一行为改函数的返回值,也就是result = 1000,结构将代码1000

    六、kotlin 与 java的对比

    同样上面的例子,我们看一下两种语言各自的写法,对比一下代码量,是否简洁等。

    1. //kotlin
    2. fun main(args: Array) {
    3. val result = "testLet".let {
    4. println(it.length)
    5. 1000
    6. }
    7. println(result)
    8. }
    9. //java
    10. public final class LetFunctionKt {
    11. public static final void main(@NotNull String[] args) {
    12. Intrinsics.checkParameterIsNotNull(args, "args");
    13. String var2 = "testLet";
    14. int var4 = var2.length();
    15. System.out.println(var4);
    16. int result = 1000;
    17. System.out.println(result);
    18. }
    19. }

    七、使用场景

    (1)、最常用的场景就是使用let函数处理需要针对一个可null的对象统一做判空处理。但对象不为空时才会执行方法体,否则不会执行。

    (2)、在有限范围内引入局部变量以提高代码的可读性。

    以上就是let内联函数的作用及使用场景,下一篇将with函数,that's all

  • 相关阅读:
    跟着GPT学设计模式之桥接模式
    Vue3+vite中引入Echarts图表
    滤波算法_标准卡尔曼滤波(SKF, Standard Kalman filter)_①基础铺垫
    某村庄供水工程设计(设计报告+cad图纸+预算工程量清单)
    vue.js样式绑定03(源代码)
    vue高频面试题
    bash条件语句练习
    软件工程导论:概述引言
    Nginx基础篇-Nginx 源码编译安装与平滑升级
    java反序列化-CC1
  • 原文地址:https://blog.csdn.net/taoyuxin1314/article/details/126436296