ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-02 15:04:19  阅读:236  来源: 互联网

标签:mVar run name people Kotlin also let result 函数


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,result,函数
来源: https://www.cnblogs.com/horseweed/p/16649865.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有