Scope Function(범위 지정 함수)
- 객체에서 람다 함수를 호출하면 해당 함수는 일시적인 Scope를 생성하고, 해당 Scope 안에서는 객체의 이름 없이도 접근이 가능하다.
apply
- 참조 연산자를 사용하지 않는다.
- 처리가 끝나면 인스턴스를 반환한다.
fun main() {
var a = Food("사과",2000).apply{
name = "세일 중인" +name
discount()
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
run
- 참조 연산자를 사용하지 않는다.
- 처리가 끝나면 최종값을 반환한다.(마지막 구문의 값을 반환)
fun main() {
var a = Food("사과",2000).apply{
name = "세일 중인" +name
discount()
}
a.run {
println("상품명: ${name}, 가격: ${price}원")
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
with
- 인스턴스를 파라미터로 받는다.
with(a) {
println("상품명: ${name}, 가격: ${price}원")
}
also
- 처리가 끝나면 인스턴스를 반환한다.
- 파라미터를 통해 인스턴스를 넘긴다.
---- price 가 중복될 경우! -----
fun main() {
var name = "오렌지"
var a = Food("사과",2000).also{
it.name = "세일 중인" +it.name
discount()
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}
let
- 처리가 끝나면 최종값을 반환한다.
- 파라미터를 통해 인스턴스를 넘긴다.
---- price 가 중복될 경우! -----
fun main() {
var price = 5000
var a = Food("사과",2000).apply{
name = "세일 중인" +name
discount()
}
a.let {
println("상품명: ${it.name}, 가격: ${it.price}원")
}
}
class Food(var name: String, var price: Int){
fun discount(){
price -= 500
}
}