-
[Kotiln] 범위 지정 함수 - let,apply,with,runProgramming/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