ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotiln] 범위 지정 함수 - let,apply,with,run
    Programming/Kotlin 2020. 10. 28. 15:37

    let() -{it}

    let() 함수는 이 함수를 호출한 객체를 이어지는 함수블럭의 인자로 전달한다.

     

    - 불필요한 변수 선언 방지 가능 !!!

    //sum 변수에 값을 저장한 후 텍스트뷰에 설정
    val sum = add(10, 40) //10 + 40
    textView.setText(sum)
    
    //계산한 후 반환된 값을 인자로 전달 받아 텍스트뷰에 설정 가능
    add(10, 40).let {
    	textView.setText(it)
    }
    

    - Null Check : 널 값이 아닌 경우 특정 작업을 수행하는 코드에 활용 가능

    fun doSomethig(message: String?){
    	if(message != null)
        	printToast("hi")
    }
    
    
    fun doSomethig(message: String?){
    	//message 가 null 이 아닌 경우에만 let() 함수를 호출한다.
    	message?.let{
    		printToast("hi")
        }
    }

     

     

    apply() - {this}

    apply() 함수는 이 함수를 호출한 객체를, 이어지는 함수 블럭의 리시버로 전달

    - 객체 이름 없이 직접 해당 객체 내부 속성에 접근 가능

     val textView = TextView().apply{
     // this : textView
        testSize = 10
        visibility = View.VISIBLE
        textColor = "BLACK"
    }

     

    with() - 매개변수 이어 받음

    with() 함수는 함수에서 사용할 객체를 매개변수를 통해 받는다.

    - 널 값이 아닌 객체에 이 함수를 사용하는 것이 좋다.

    fun setTextView(textView: TextView){
    	
        //인자로 받은  textView의 여러 속성을 변경한다.
        with(textView){
        	text = " hi "
            gravity = Center
        }
    }

     

    run() *안전한 호출 가능

    run() 함수는 인자가 없는 익명 함수처럼 사용하는 형태와 객체에서 호출하는 형태를 제공한다.

    - run()을 인자가 없는 익명함수처럼 사용하는 경우, 복잡한 계산을 위해 여러 임시변수가 필요할 때 유용하게 사용할 수 있다.

    val padding = run{
    //해당 블럭 내부에서 선언하는 값들은 외부 노출 X
    
    	val left = TypedValue.applyDimension(..)
        val right = TypedValue.applyDimension(..)
    	
        left + right //계산 값 반환
    }

    - run()은 안전한 호출을 할 수 있으므로, 널 값일 수 있는 객체의 속성이나 함수에 연속적으로 접근해야 할 때 유용

    onCreate(savedInstanceState: Bundle?){
    
    	// savedInstanceState 가 null이 아니라면 수행
    	savedInstanceState?.run{
        	// bundle 값 추출
            // Ui 복원
        }
    }

     

     

    scope에 this가 들어오냐 vs it이 들어오냐,

    scope의 결과로 자기자신이 return되느냐 vs 마지막 줄의 결과가 return되느냐

    등 서로가 비슷하지만 다른 개념들입니다.



    'Programming > Kotlin' 카테고리의 다른 글

    코틀린 함수 관련 개념  (1) 2022.05.11
    About Kotlin  (0) 2020.11.05
    [Kotlin] 접근제한자  (0) 2020.07.31
    [Kotlin] Null  (0) 2020.07.15
    [Kotlin] 자료형과 변수  (0) 2020.07.15
Designed by Tistory.