val numbers = mutableListOf("one", "two", "three", "four", "five")
val resultList = numbers.map { it.length }.filter { it > 3 }
println(resultList)
위와 같은 코드를 let을 사용해 다음과 같이 나타낼 수 있다.
val numbers = mutableListOf("one", "two", "three", "four", "five")
numbers.map { it.length }.filter { it > 3 }.let {
println(it)
// and more function calls if needed
}
코드의 가독성을 높히기 위해 제한된 스코프 내에서 지역변수를 사용하기 위한 용도로 사용한다.
기본적으로 해당 스코프 내의 lambda argument는 it으로 정의되지만 원한다면 다른 이름으로 사용할 수 있다.
val numbers = listOf("one", "two", "three", "four")
val modifiedFirstItem = numbers.first().let { firstItem ->
println("The first item of the list is '$firstItem'")
if (firstItem.length >= 5) firstItem else "!" + firstItem + "!"
}.uppercase()
println("First item after modifications: '$modifiedFirstItem'")
위에서는 firstItem으로 lambda argument를 따로 정의함
해당 문맥의 객체(context obejct)가 전달된다. lambda result가 반환된다.
'해당 객체와 함께(with) 다음과 같이 수행하세요' 와 같이 코드를 읽으면 된다.(with can be read as “ with this object, do the following.”)
val numbers = mutableListOf("one", "two", "three")
with(numbers) {
println("'with' is called with argument $this")
println("It contains $size elements")
}
with와 동일한 기능을 수행한다.
an extension function of the context object
val service = MultiportService("https://example.kotlinlang.org", 80)
val result = service.run {
port = 8080
query(prepareRequest() + " to port $port")
}
// the same code written with let() function:
val letResult = service.let {
it.port = 8080
it.query(it.prepareRequest() + " to port ${it.port}")
}
it을 사용하지 않고 해당 객체의 문맥을 이어서 사용한다.
주로 객체 초기화 과정에서 사용한다.
apply는 값을 반환하지 않고, 대상 객체의 멤버 변수를 대상으로 사용해야 한다.
val adam = Person("Adam").apply {
age = 32
city = "London"
}
println(adam)