1. 람다식
함수는 값처럼 사용될 수 있다. 특히 함수의 파라미터에 함수를 값처럼 넣을수도있음.
이런 경우때문에, 함수를 그 자리에서 값으로서 정의하고 이용할 수 있는 방법이 필요해졌다.
그 방법이 람다식이다.
fun main() {
val price = 12500
val price2 = calc(price,10)
val price3 = calc(price,20)
println("price2 : $price2 , price3 : $price3 ")
}
val calc = {p :Int, r:Int -> (p*(100.0+r)/100.0).toInt()}
람다식이란??
(1) { } 안에 파라미터와 식을 -> 기호로 연결해준다.
=> 준비한 파라미터를 사용한 식을 실행결과로 토해내는 함수를 만든것이다.
(2) 실행하는 식에는 return이 필요하지 않다. 그냥 실행식이 결과값이 된다.
=> 기본적으로 람다식이라는 것은 식을 「실행하는 함수」이다.
※ 기본적으로 Kotlin 람다식의 파라미터에는 디폴트값을 넣을 수 없다. error
실제 식은..?
val calc : (p : Int, r : Int) -> Int = {
p : Int, r : Int -> (p*(100.0+r)/100.0).toInt()
}
그런데 저 람다식을 좀 더 간결하게 줄일 수 있다. equal를 이용하자
(이래서 사람들이 코틀린 해석을 어려워한다. 다 줄여둠 .. 자바를 꼼꼼하게 공부해야한다.)
fun calc(p : Int, r : Int) = (p*(100.0+r)/100.0).toInt()
fun calc(p : Int, r : Int) 은 함수 선언 부분이다. 그리고 실행식을 =으로 대입한다.
함수를 호출하면 식이 실행되고, 결과를 토해내는 함수가 된다. ( return을 지정할 필요가 없다)
val calc = {p :Int, r:Int -> (p*(100.0+r)/100.0).toInt()}
이 형식이라도 제대로 기억하자
2. 고차함수
람다식이 가장 많이 쓰이는 이유는 파라미터와 리턴값때문이다.
파라미터나 리턴값에 함수를 값으로서 사용하는 함수이다! 이걸 고차함수라부른다.
fun main() {
val price = 12500
calc(price, { n -> n * 1.1 })
calc(price, { n -> n / 1.1 })
}
fun calc(p:Int, f:(p:Int)->Double){
val re = (f(p)).toInt()
println("* $p -> $re")
}
//output
* 12500 -> 13750
* 12500 -> 11363
일단 fun calc의 파라미터를 보자
파라미터1 --- p : Int (Int형 값)
파라미터2 --- f : ( p : Int) - > Double ( 인트형 파라미터 1개를 갖고, 더블형을 토해내는 함수)
그리고 calc(price, { n-> n*1.1})에서 함수자체가 파라미터값으로 들어갔다.
즉 Int를 받아서 1.1배해서 더블형으로 토해내라는뜻이다.
자주쓰는표현! 람다식에서 파라미터를 밖으로 뺄수있다.
calc(price, { n -> n / 1.1 })
을
calc(price) { n->
n * 1.1
}
로 바꿀수있다.
'Kotlin' 카테고리의 다른 글
Kotlin10. class와 OOP (0) | 2023.08.06 |
---|---|
Kotlin9. 재귀함수, 꼬리재귀 (0) | 2023.08.01 |
Kotlin7. 함수 (0) | 2023.07.31 |
Kotlin6. 컬렉션 (0) | 2023.07.31 |
Kotlin5. 제어구문 if(표현식), when 등등... 분기(分岐)란? (0) | 2023.07.30 |