객체 컨텍스트 내에서 코드 블록을 실행할 수 있게 하는 함수.
람다식을 이용해서 Scope Function을 호출하면 Scope( 범위 == 코드 블록 ) 안에서 Context Object( it 또는 this ) 를 통해서 객체에 접근이 가능해진다.
5가지 종류가 존재 ( apply, let, run, with, also )
이들 사이에는 두 가지 주요 차이점이 존재
return value 가 lambdadls 경우는 코드 블록 내에서만 적용 ,
context object는 object가 변경.
val adam = Person("Adam").apply {
age = 32
city = "London"
}
println(adam)
val numbers = mutableListOf("one", "two", "three", "four", "five")
numbers.map { it.length }.filter { it > 3 }.let {
println(it)
// and more function calls if needed
}
val str: String? = "Hello"
val length = str?.let {
println("let() called on $it")
processNonNullString(it)
it.length
}
val numbers = mutableListOf("one", "two", "three")
with(numbers) {
println("'with' is called with argument $this")
println("It contains $size elements")
}
val service = MultiportService("https://example.kotlinlang.org", 80)
val result = service.run {
port = 8080
query(prepareRequest() + " to port $port")
}
// let과 비교
val letResult = service.let {
it.port = 8080
it.query(it.prepareRequest() + " to port ${it.port}")
}
val numbers = mutableListOf("one", "two", "three")
numbers
.also { println("The list elements before adding new one: $it") }
.add("four")