Kotlin 原生拓展函数与非拓展函数

先看一下图文

 

根据定义的性质可分为两类

非拓展函数

repeat         循环函数,可使用该函数执行一些有限循环任务,务必在构造函数传入循环次数 repeat(repeatNumber:Int = 1)

with             条件补充区域,可在某些需要两个或者多个函数对象直接的属性进行依赖操作时使用

伪代码

    data class A(val number:Int)
    
    data class B(val sex:String)
    
    data class C(var school: String)  
    
    var b = B("女")
    
    fun toDo(){
        var a = A(1)
        var result =  with(b){
            print("b= ${b.sex}")
        }
        print("result = $result")
    }
    
    // result = Kotlin.Unit

run        返回拓展函数区域的最后一行结果

fun toDo(){
    var resultA = run{
      "hell"  
    }

    var resultB = run{
        1
    }
    
    print($resultA $resultB)
}

// hell 1

 拓展函数

apply    可以更改拓展函数的属性并返回该更改后的对象

        
        var a = A("男")
        var result = a.apply {
            name = "女"
        }
        LogUtil.d(TAG, "a = $a  result =$result")
        
        //输出 a = A(name=女)  result =A(name=女)

also     跟apply没什么区别就是属性调用要用 it 

        var a = A("男")
        var result = a.also {
            it.name = "女"
        }
        LogUtil.d(TAG, "a = $a  result =$result")
        
        // 输出 a = A(name=女)  result =A(name=女) 

let       拓展区域返回当前方法所需要的任意值   注意方法的定义类型和let return 返回的值必须是一至的

   fun toDo(): String{
        var a = A("男")
        a.let { 
            if (it.name == "男"){
                return "男子高中"
            } else{
                return "女子高中"
            }
        }
    }

run      拓展性run函数无返回值,仅对拓展对象的属性进行操作

        var a = A("男")
        var result = a.run {
            name = "女"
        }
        LogUtil.d(TAG, "a = $a  result =$result")

        // 输出 a = A(name=女)  result =kotlin.Unit

          

最后,对于使用没有严格限制的公司来说,使用哪种拓展函数去更改属性都是没什么大问题的不用纠结,但是对于洁癖怪和一些特别讲究的人就要自行区分一些各个API的用途了,

比如 apply 字面意思就是应用    那就可以使用它去做一些属性赋值之类的操作

比如 also    字面意思是额外操作  那就可以使用它去做一些除了属性赋值以外的存储之类操作

比如 let       字面意思是允许  也就是放权的意思,再说白一点就是可以把一些业务实现由let拓展函数区域内去实现并且返回需要的值,而这个返回值是基于当前对象所在的方法定义的返回值,自此结束,如果你有什么高见或者见解可以放评论区大家相互提高一下水平

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值