首页 > 其他分享 >Kotlin:内联函数let、also、with、run、apply

Kotlin:内联函数let、also、with、run、apply

时间:2022-09-02 14:56:23浏览次数:56  
标签:mVar run name people Kotlin also let 函数

Let

  • 使用方法:

    // 作用1:使用it替代object对象去访问其公有的属性 & 方法
    object.let{
       it.todo()
    }
    
    // 作用2:判断object为null的操作
    object?.let{//表示object不为null的条件下,才会去执行let函数体
       it.todo()
    }
    
    // 注:返回值 = 最后一行 / return的表达式
    
  • 示例:

    // 使用Java
    if( mVar != null ){
        mVar.function1();
        mVar.function2();
        mVar.function3();
    }
    
    // 使用kotlin(无使用let函数)
    mVar?.function1()
    mVar?.function2()
    mVar?.function3()
    
    // 使用kotlin(使用let函数)
    // 方便了统一判空的处理 & 确定了mVar变量的作用域
    mVar?.let {
        it.function1()
        it.function2()
        it.function3()
    }
    

also

  • 类似let函数,但区别在于返回值:

let函数:返回值 = 最后一行 / return的表达式

also函数:返回值 = 传入的对象的本身

  • 示例:

    // let函数
    var result = mVar.let {
        it.function1()
        it.function2()
        it.function3()
        999
    }
    // 最终结果 = 返回999给变量result
    
    // also函数
    var result = mVar.also {
        it.function1()
        it.function2()
        it.function3()
        999
    }
    // 最终结果 = 返回一个mVar对象给变量result
    

With

  • 调用同一个对象的多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可

  • 使用方法:

     with(object){
       // ... 
     }
    
    // 返回值 = 函数块的最后一行 / return表达式
    
  • 示例:

    // 此处要调用people的name 和 age属性
    // kotlin
    val people = People("carson", 25)
    with(people) {
    	println("my name is $name, I am $age years old")
    }
    
    // Java
    User peole = new People("carson", 25);
    String var1 = "my name is " + peole.name + ", I am " + peole.age + " years old";
    System.out.println(var1);
    

run

  • 结合了let、with两个函数的作用,

调用同一个对象的多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可

定义一个变量在特定作用域内

统一做判空处理

  • 使用方法

    object.run{
    // ... 
    }
    // 返回值 = 函数块的最后一行 / return表达式
    
  • 示例:

    // 此处要调用people的name 和 age属性,且要判空
    // kotlin
    val people = People("carson", 25)
    people?.run{
        println("my name is $name, I am $age years old")
    }
    
    // Java
    User peole = new People("carson", 25);
    String var1 = "my name is " + peole.name + ", I am " + peole.age + " years old";
    System.out.println(var1);
    

    apply

  • 与run函数类似,但区别在于返回值:

    run函数返回最后一行的值 / 表达式

    apply函数返回传入的对象的本身,特别需要注意的是apply函数中表示对象本身使用的是this关键字而不是it

  • 应用场景:对象实例初始化时需要对对象中的属性进行赋值 & 返回该对象

  • 示例:

    // run函数
    val people = People("carson", 25)
    val result = people?.run{
        println("my name is $name, I am $age years old")
        999
    }
    // 最终结果 = 返回999给变量result
    
    // Java
    val people = People("carson", 25)
    val result = people?.apply{
        println("my name is $name, I am $age years old")
        999
    }
    // 最终结果 = 返回一个people对象给变量result
    

img

标签:mVar,run,name,people,Kotlin,also,let,函数
From: https://www.cnblogs.com/horseweed/p/16649865.html

相关文章