kotlin(七) 标准 函数

标准函数

        标准函数是指Standard.kt文件中定义的函数,任何Kotlin代码都可以自由的调用所有标准函数,标准函数有很多我们这里主要学习下几个常用的标准函数。

1.1 apply{}

      apply函数可看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。

    1: 返回的是本省  2 没有it   只有this

  • 1、创建可变Map

 println("-----------apply{}----------------------创建可变 map")
    var maps = mutableMapOf<String,Int>("ANDROID" to 1, Pair("java",2))
     .apply { put("Flutter",3) }//
    println(maps)//{ANDROID=1, java=2, Flutter=3}
  • 2、通过apply()函数添加数据

        println("-----------apply{}------------函数添加数据")
    //    var intent:Intent?= Intent(Application(),JavaActivity::class.java).apply {
    //        putExtra("standard1",1)
    //        putExtra("stardard2",2)
    //    }

            可以看到,调用一个个函数类配置接收者时,变量名(map、intent)就省掉了,这是因为,在lambda表达式里,apply能让每个配置函数都作用于接收者,这种行为有时又叫做相关作用域,因为lambda表达式里的所有函数调用都是针对接收者的,或者说,它们是针对接收者的隐式调用。
     

1.2 let

        let函数能使某个变量作用于其lambda表达式里,让it关键字能引用它。let与apply比较,let会把接收者传给lambda,而apply什么都不传,匿名函数执行完,apply会返回当前接收者,而let会返回lambda的最后一行

1:返回最后一行

2:可以用it

    println("\n----------let----------------------")
    var  let1:String? =null
    var str1=let1.let { "-$it ----let1-----" }
    println(str1)//   -null ----let-----
    println("letStr".let { "$it -------let-------" })//letStr -------let-------

1.3 also
        also函数和let函数功能相似,和let一样,also也是把接收者作为值参传给lambda,但有一点不同:also返回接收者对象,而let返回lambda结果。因为这个差异,also尤其适合针对同一原始对象,利用副作用做事,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用。
 

    println("\n---------------also返回接受对象---------")
    var alsoStr = "asloStr"
   var s  = alsoStr.also { println("$it") }.also { println("$it".plus(alsoStr.length)) }
    println(s)//asloStr

1.4 run

        具备接收者的隐式调用(apply)返回的是lambda的最后一行(let)

       持有的是this 没有it

    println("\n____________run{} 相当于apply  返回最后一句____________________")
    var runT ="ANDROID"
   var runS = runT.run {
        startsWith("lll")
        println(runT)//android
        "flutter"
    }.run {
         println("$this")//flutter
        "ios"
    }
    println(runS)//ios

1.5 with

        with函数是run的变体,功能一样,但是调用with时需要值参作为其第一个参数传入

 println("\n____________with(){} 相当于run{}  但需要传参 返回最后一句____________________")
    var whitS ="android"
    whitS = with(whitS){
       println("$this == $whitS")//android == android
        "with $this  ios"
    }
    println(whitS)//with android  ios

1.6 takelf
        如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takelf就非常有用,概念上讲,takelf函数类似于if语句,但它的优势是可以直接在对象实例上调用,避免了临时变量赋值的麻烦。

        takelf函数需要判断lambda中提供的条件表达式,给出true或false结果:

如果判断结果是true,从takelf函数返回接收者对象。

如果是false,则返回null。
 

    println("\n___________talkif{}____________________")
    var talkifS="android"
    var talkifT = talkifS.takeIf { talkifS.startsWith("android") }
    println(talkifT)//android
    var takeif =talkifS.takeIf { talkifS.startsWith("ios") }
    println(takeif)//null

1.7 takeUnless

        takelf辅助函数takeUnless,只有判断你给定的条件结果是false时,takeUnless才会返回原始接收者对象,跟takelf刚好相反

    val strTakeIfUn = "Android帅次"
    val un = strTakeIf.takeUnless {
        it.startsWith("Android")//返回true
    }
    println(un)//null
    var un2 = strTakeIfUn.takeUnless {
        it.startsWith("帅次")//返回false
    }
    println(un2)//Android帅次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值