Kotlin 역할 영역 함수 let,run,also,apply,with,takeIf,takeUnless

13445 단어 kotlin
Kotlin 학습 총화
Kotlin 에 내 장 된 데이터 변환 에 사용 되 는 함 수 는 집합 연산 자 와 비슷 하지만 모든 대상 에 사용 할 수 있 습 니 다.
먼저 data 데이터 형식,자바 의 bean 대상 을 정의 합 니 다.
data class User(var id: Int, var name: String)

let 와 run
fun test1() {
     
    val user = User(1001, "zhangyu")
    //let run
    //           
    //    let     ,run      
    val letResult = user.let {
      user: User -> "let::${
       user.javaClass}" }
    println(letResult)//let::class com.zhangyu.testKotlin.User
    //          , it  
    val letResult2 = user.let {
      "let::${
       it.javaClass}" }
    println(letResult2)//let::class com.zhangyu.testKotlin.User
    //   ,   user  this
    val runResult = user.run {
      "run::${
       this.javaClass}" }
    println(runResult)//run::class com.zhangyu.testKotlin.User
}

also,apply,with

fun test2() {
     
    val user = User(1001, "zhangyu")
    //also apply
    //        
    //        ,         
    //    also     , apply      
    user
            .also {
     
                println("${
       it.id}") //1001
            }
            .apply {
     
                println(this.name) //zhangyu
            }
            .name = "liming"
            .also {
     
                println(it) //liming
            }
            .also {
     
                println(user.name) //   user.name  zhangyu
            }
    println(user.name) //limingwi
    
    //with      ,       
    //with apply,            
    with(user) {
     
        this.name = "with"
    }
    user.apply {
     
        this.name = "apply"
    }
}

takeIf 와 take Unless
fun test3() {
     
    val user = User(1001, "zhangyu")
    //takeIf takeUnless
    //takeIf           , false ,takeIf      
    //if a or b
    val user1 = user
            .takeIf {
     
                it.id > 0 //true  user(      ),false   
            }
            ?.also {
     
                println(it.name) //true  
            }
            ?: println(" ")//false  
    println(user1) //User(id=1001, name=zhangyu)
    //if a or b
    val user2 = user
            .takeIf {
     
                it.id < 0 true  user(      ),false   
            }
            ?.also {
     
                println(it.name) //true  
            }
            ?: println(" ") //false  
    println(user2)//kotlin.Unit
    //if b or a
    user
            .takeUnless {
     
                it.id < 0
            }
            ?.also {
     
                println(" ") //  false
            }
            ?: println(user.name) //  true
}

몇몇 고전적 인 용법
  • paint 를 만 들 려 면 apply 를 사용 하면 역할 영역 에서 이 대상 의 속성 을 직접 할당 할 수 있 습 니 다.paint.color 를 사용 하지 않 아 도 됩 니 다
  •     var paint = Paint()
            .apply {
         
                color = 0x000000
                textSize = 30F
                isAntiAlias = true
            }
    

    좋은 웹페이지 즐겨찾기