2020. 6. 11. 14:18ㆍAndroid/Kotlin
1. let() 함수
- let() 함수는 블록에 자기 자신을 인수로 전달하고 수행된 결과를 반환
- 인수로 전달한 객체는 it으로 참조
- let()함수는 ?. (안전한 호출 연산자) 와 함께 사용하면 null 값이 아닐 때만 실행하는 코드로 사용할 수 있다
- 사용 : null 이 아닌 경우에 코드를 실행해야 하는 경우
// fun <T, R> T.let(block: (T) -> R) : R
val result = str?.let{
Integer.parseInt(it)
}
2. with() 함수
- with() 함수는 인수로 객체를 받고 블록에 리시버 객체로 전달하며 수행된 결과를 반환
- 리시버 객체로 전달된 객체는 this로 접근 (this는 생략 가능)
- 안전한 호출이 불가능 하므로 인수가 null이 아닌 경우에만 사용해야 함
- 사용 : Non-Nullable 수신 객체이고 결과가 필요 없는 경우
// fun <T, R> with(receiver: T, block T.() -> R) : R
with(str) {
println(toUpperCase())
}
3. apply() 함수
- apply()함수는 블록에 개체 자신이 리시버 객체로 전달되며 이 객체가 반환됨
- 객체의 상태를 변환시키고, 그 객체를 다시 반환할 때 주로 사용 (프로퍼티 값 할당할때 유용)
- 사용 : 초기화 할 경우 많이 사용됨
// fun <T> T.apply(block: T.() -> Unit) : T
val result = car?.apply {
car.setColor(Color.RED)
}
4. run() 함수
- 익명 함수처럼 사용하는 방법, 객체에서 호출하는 방법 모두 제공
- 익명 함수처럼 사용
- 블록의 결과를 반환
- 블록안에 선언된 변수는 모두 임시로 사용되는 변수이므로 복잡한 계산이 필요할 때 유용
// fun <R> run(block: () -> R) : R
val avg = run {
val korean = 100
val english = 200
(korean + english)/2
}
- 객체에서 호출하는 방법
- 객체를 블록의 리시버 객체로 전달하고 블록의 결과를 반환
- 안전한 호출을 사용할 수 있어 with() 함수보다 유용
// fun <T, R> run(block: T.() -> R) : R
str?.run {
println(toUpperCase())
}
- 사용 : 어떤 값을 계산하거나, 지역 변수의 범위를 제한할때 사용 (임시로 사용되므로), 블록 내 여러 작업시 사용
5. also() 함수
- also() 함수는 코드 블록 내에 전달된 수신객체를 그대로 다시 반환
- 사용 : 수신 객체의 속성을 변경하지 않고 사용하는 경우, 데이터 할당 전 유효성 검사시
// fun <T> T.also(block: (T) -> Unit) : T
val animal : Animal = getAnimal().also{
println(it.name)
println(it.age)
}
네 가지 함수를 표로 정리하면 다음과 같다
이어서 구체적인 사용 방법에 대해 포스팅 하겠습니다
https://kotlinlang.org/docs/scope-functions.html#functions
Scope functions | Kotlin
kotlinlang.org