람다식의 타입 생략
람다식을 선언했을 때 타입을 선언할 수 있는 경우가 있다.
타입을 생략하지 않은 경우
val myLambda:(Int, Int) -> Int = {a: Int, b: Int -> a+b}
람다식 자체의 타입을 생략하는 경우 (일반적으로 많이 사용하는 경우)
val myLambda = {a: Int, b: Int -> a+b}
람다식 내부 입력 변수 타입을 생략하는 경우
val myLambda:(Int, Int) -> Int = {a, b -> a+b}
일반적인 함수와 람다식 사용의 차이
//일반적인 함수
fun myFun(i: Int): Int = i * 10
fun main() {
val times = ::myFun
println(times(2)) //20
}
//람다식
fun main() {
val times = { x: Int -> x * 10 }(2)
println(times) //20
}
일반적인 함수는 참조된 변수를 통해서 값을 입력해야하지만, 람다식은 람다식에서 바로 값을 입력할 수 있다는 차이점이 있다.
고차함수의 마지막 형식 인자가 람다식인 경우
fun highOrderFunc(a: Int, b:Int, sum: (Int, Int) -> Int): Int {
return sum(a, b)
}
fun main() {
val result = highOrderFunc(4, 5, { x, y -> x + y })
}
고차함수에 인자를 전달할 때는 위와 같이 사용할 수 있다.
하지만 고차함수의 마지막 인자 값이 람다식이라면 람다식을 바깥으로 뺄 수 있다.
fun highOrderFunc(a: Int, b:Int, sum: (Int, Int) -> Int): Int {
return sum(a, b)
}
fun main() {
val result = highOrderFunc(4, 5){ x, y -> x + y }
}
함수의 인자가 람다식 하나인 함수의 사용
함수의 마지막 인자가 람다식이라면 바깥으로 뺄 수 있다고 했다.
근데 인자 자체가 한개인 함수에서 그 인자가 람다라면 어떻게 될까?
//인자가 있는 람다식을 받는 고차함수
fun func(pass: (String) -> String){
println(pass("Hello"))
}
//인자가 없는 람다식을 받는 고차함수
fun func2(noParam: () -> String){
println(noParam())
}
fun main() {
func(){s: String -> "$s Kim"} //Hello Kim
func2(){"Hello Kim"} //Hello Kim
}
이렇게 함수 바깥으로 람다식을 뺄 수 있는데 저기서 더 생략할 수 있는 방법이 있다. ()를 생략할 수 있다. 따라서 아래와 같이 작성할 수 있다.
//인자가 있는 람다식을 받는 고차함수
fun func(pass: (String) -> String){
println(pass("Hello"))
}
//인자가 없는 람다식을 받는 고차함수
fun func2(noParam: () -> String){
println(noParam())
}
fun main() {
func{s: String -> "$s Kim"} //Hello Kim
func2{"Hello Kim"} //Hello Kim
}
it: 람다식의 형식 인자가 하나뿐일 때
fun convert(s: String, lower: (String) -> String): String {
return lower(s)
}
fun main() {
val hello = "Hello, Kotlin!"
println(convert(hello){s: String -> s.lowercase()})
}
람다 식의 인자가 하나 뿐인 경우에는 위의 형식과 같이 사용할 수 있다.
하지만 저 형식을 더 생략할 수 있는 경우가 있다.
fun convert(s: String, lower: (String) -> String): String {
return lower(s)
}
fun main() {
val hello = "Hello, Kotlin!"
println(convert(hello){it.lowercase()})
}
이렇게 it을 사용해서 입력되는 변수명, 타입을 한번에 사용할 수 있다.
'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글
익명 함수 (1) | 2024.10.11 |
---|---|
확장함수(Extension Funtions) (1) | 2024.10.11 |
람다식(1) - 기본적인 선언과 호출, 고차함수와의 사용 (0) | 2024.10.10 |
고차함수(2) - 응용편 (0) | 2024.10.10 |
고차함수(1) - 선언과 사용 (0) | 2024.10.10 |