[코틀린기초] 11. 코틀린 표준함수 also()
함수를 호출하는 객체 T를 이어지는 block에 전달하고 객체 T자체를 반환한다.
also는 블록 안의 코드 수행 결과와 상관없이 T인 바로 객체 this를 반환
let함수와 비교해보자.
public inline fun <T,R> T.let(block: (T) -> R) : R = block(this)
public inline fun <T> T.also(block: (T) -> Unit) T{block(this); return this}
간단한 사용 예
var m = 1
m = m.also{it+3}
println(m) // 원본 값인 1이 출력됨
fun main(){
data class Person(var name:String, var skills:String)
var person = Person("Kildong","Kotlin")
val a = person.let{
it.skills = "Android"
"success" // 마지막 문장을 결과로 반환
}
println(person)
println("a: $a") // success가 출력됨
val b = person.also{
it.skills = "JAVA" // it은 객체의 참조를 복사해 오므로 멤버 변경 가능
"success" // 사용되지 않음
}
println(person)
println("b: $b") //success 대신에 person 객체가 출력됨
}
특정 단위의 동작 분리
디렉터리 생성 활용
fun makeDir(path:String):File{
val result = File(path)
result.mkdirs()
return result
}
위의 함수를 let과 also로 다음과 같이 개선할 수 있다.
fun makeDir(path: String) = path.let{File(it)}.also{it.mkdirs()}
//이때 반환되는 값은 File(it)의 수행 결과이다.