매개변수 개수에 따라 람다식을 구성하는 방법
매개 변수와 인자 개수에 따라 람다식의 생략된 표현이 가능
* 람다식에 매개변수가 없는 경우
noParam({"Hello World!"})
fun noParam(out: () -> String) = println(out())
noParam( ) 함수의 매개 변수는 람다식 1개를 가지도 있는데 이때는 함수 사용시 소괄호 생략 가능
이 람다식에는 매개변수가 없으므로 화살표(->) 기호가 사용되지 않음
그리고 여기서 소괄호는 생략 가능
매개변수는 없지만 반환 자료형은 문자열을 반환
따라서 println( )에 의 해 "Hello World" 가 출력
* 람다식의 매개변수가 1개인 경우
람다식에 매개변수가 1개 있을 경우 람다식에 화살표(->) 기호 왼쪽에 필요한 변수를 써줘야 함
fun main( ) {
oneParam({ a -> "Hello World! $a" })
oneParam { a -> "Hello World! $a" } // 위와 동일한 결과, 소괄호 생략 가능
oneParam { "Hello World! $it" } // 위와 동일한 결과, it으로 대체 가능
}
// 매개 변수가 1개 있는 람다식이 oneParam( ) 함수의 매개변수 out으로 지정됨
fun oneParam(out: (String) -> String) {
println(out("OneParam"))
}
* 람다식의 매개 변수가 2개 이상인 경우
fun main( ) {
// 매개변수가 2개 있는 람다식
moreParam { a, b -> "Hello World! $a $b } // 매개 변수 이름 생략 불가
}
// 매개변수가 2개 있는 람다식의 moreParam 함수의 매개변수로 지정됨
fun moreParam(out: (String, String) -> String) {
println(out("OneParam", "TwoParam"))
}
만일 특정 람다식의 매개변수를 사용하고 싶지 않을 때는 이름 대신에 언더스코어(_)로 대체
moreParam { _, b -> "Hello World! $b" } // 첫 번째 문자열은 사용하지 않고 생략
* 일반 매개 변수와 람다식 매개 변수 같이 사용하기
fun main( ) {
// 1. 인자와 함께 람다식을 사용하는 경우
withArgs("Arg1", "Arg2", { a, b -> "Hello World! $a, $b })
// 2. withArgs( ) 함수의 마지막 인자가 람다식인 경우 소괄호 바깥으로 분리 가능
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))
}
* 일반 함수에 람다식 매개변수를 2개 이상 사용하기
마지막 인자는 소괄호 밖에 둘 수 있음
({첫 번째}, {두 번째})
({첫 번째}) {두 번째}
람다식 함수가 3개가 되었을 때도 마지막 람다식만 빼내어 다음과 같이 구성
({첫 번째}, {두 번째}) {세 번째}