람다함수 안에 여러 파라미터가 있으면 맨 마지막 값이 반환값이 된다
하나이면 it을 사용할 수 있다
//1. 파라미터가 여러개인 람다함수
val calculate:(Int,Int) -> Int = {a,b ->
print(a)
print(b)
a+b //맨 마지막 값을 반환
}
//2. 파라미터가 없는 람다함수
val a:() -> Unit = {println("파라미터가 없어요")}
//3. 파라미터가 하나인 람다함수
val c:(String) -> Unit = {println("$it 람다함수")}
함수형 언어의 특징을 더 편리하게 사용할 수 있도록 기본 제공하는 함수들
instance의 속성이나 함수를 더 편하게 사용하도록 해준다
종류는 apply, run, with, also, let 5가지가 있다
인스턴스 생성 후 변수에 담기 전 초기화 과정 수행, main 함수와 별도의 스코프에서 인스턴스의 변수와 함수를 조작하여 코드가 깔끔해진다
fun main() {
val a Book("dada",10000).apply{
name = "name is" + name
discount()
}
class Book{
fun discount(var name : String, var price: Int){
price -= 2000
}
}
2. run
인스턴스 대신 결과값을 반환한다. 이미 만들어진 후 인스턴스의 함수나 속성을 스코프로 쓸 수 있다
fun main() {
val a = Book("dada",10000).apply{
name = "name is" + name
discount()
//run으로 변수의 접근가능
a.run{
println("상품명 : ${name}, 가격 : ${price}원")
}
}
class Book{
fun discount(var name : String, var price: Int){
price -= 2000
}
}
run과 같은 기능, 인스턴스를 패러미터로 받는다는 차이가 있다
a.run{} / with(a){}
각각 apply, run 같은 기능을 한다
처리가 끝나면 인스턴스 반환 apply / also
처리가 끝나면 최종 값 반환 run / let
a.let{
println("상품명 : ${it.name}, 가격 : ${it.price}원")
}
스코프 함수는 인스턴스의 속성과 함수를 scope안에서 분리해 사용하여 코드의 가독성을 향상해준다!