fun sum ( x : Int, y : Int ) = x + y
funcParam (3, 2, sum) // 오류! sum은 람다식이 아님
fun funcParam(a : Int, b : Int, c : (Int, Int) -> Int) : Int {
return c (a, b)
}
funcParam(3, 2, ::sum) // sum이 람다식이 아닌 경우 이렇게 호출해주면 됨!
fun main() {
// 1. 인자와 반환값이 있는 함수
val res1 = funcParam (3, 2, ::sum)
println(res1)
// 2. 인자가 없는 함수
hello(::text) // 반환값이 없음
// 3. 일반 변수에 값처럼 할당
val likeLambda = ::sum
println(likeLambda(6,6))
}
fun sum (a : Int, b : Int ) = a + b
fun text (a : String, b : String ) = "Hi! $a $b"
fun funcParam ( a : Int, b : Int, c : (Int, Int) -> Int) : Int {
return c (a, b)
}
fun hello (body : (String , String) -> String ) : Unit {
println(body("Hello", "World"))
}
매개변수가 없는 경우
fun main() {
// 매개변수 없는 람다식 함수
noParam ( { "Hello Wrold!" } )
noParam { "Hello Wrold!" } // 매개변수가 람다식 하나일 경우만 !!!위와 동일 결과, 소괄호 생략가능
}
// 매개변수가 없는 람다식 함수가 noParam 함수의 매개변수 out으로 지정됨
fun noParam(out : () -> String ) = println(out())
매개변수가 한 개인 경우
fun main() {
// 매개변수가 하나 있는 람다식 함수
oneParam ( { a -> "Hello Wrold! $a" } )
oneParam { a -> "Hello Wrold! $a" } // 위와 동일 결과, 소괄호 생략 가능
oneParam { "Hello Wrold! $it" } // 위와 동일 결과, it으로 대체 가능
}
// 매개변수가 하나 있는 람다식 함수가 oneParam 함수의 매개변수 out으로 지정됨
fun oneParam(out : (String) -> String ) {
println(out("OneParam"))
}
매개변수가 두 개 이상인 경우
fun main() {
// 매개변수가 두 개 있는 람다식 함수
moreParam { a, b -> "Hello Wrold! $a $b" } // 매개변수명 생략 불가
}
// 매개변수가 두 개 있는 람다식 함수가 moreParam 함수의 매개변수로 지정됨
fun moreParam(out : (String, String) -> String ) {
println(out("OneParam", "TwoParam"))
}
매개변수를 생략하는 방법 ( 디폴드값 있는경우)
moreParam { _, b -> "Hello World! $b" } // 첫 번째 문자열은 사용하지 않고 생략
일반 매개변수와 람다식 매개변수를 같이 사용
fun main() {
// 인자와 함께 사용하는 경우
withArgs("Arg1", "Arg2", { a, b -> "Hello World! $a $b" })
withArgs("Arg1", "Arg2") { a, b -> "Hello World! $a $b" } // 마지막 인자가 람다식인 경우 소괄호 바깥으로 분리 가능
}
// withArgs 함수는 일반 매개변수 2개를 포함, 람다식 함수를 마지막 매개변수로 가짐
fun withArgs ( a: String, b: String, out : (String, String) -> String ) {
println(out(a, b))
}
두 개의 람다식을 가진 함수의 사용
fun main() {
twoLambda( { a, b -> "First $a $b" }, { " Second $it "})
twoLambda( { a, b -> "First $a $b" } ) { " Second $it " } // 위와 동일 세개의 람다식이 있는 경우 마지막 것만 뺄 수 있음
}
fun twoLambda ( first : ( String, String ) -> String, second : (String) -> String ) {
println(first( "OneParam", "TwoParam") )
println(second("OneParam"))
}
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] 네트워크 호출 구현 람다식 활용 (0) | 2019.07.05 |
---|---|
[Kotlin] 동기화를 위한 코드 구현 람다식 활용 (0) | 2019.07.05 |
[Kotlin] 고차 함수와 람다식 (0) | 2019.07.04 |
[Kotlin] 함수형 프로그래밍 (0) | 2019.07.04 |
[Kotlin] 함수 선언하고 호출하기 (0) | 2019.07.03 |