2020. 10. 29. 12:23

매개변수 개수에 따라 람다식을 구성하는 방법


매개 변수와 인자 개수에 따라 람다식의 생략된 표현이 가능



* 람다식에 매개변수가 없는 경우

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개가 되었을 때도 마지막 람다식만 빼내어 다음과 같이 구성


({첫 번째}, {두 번째}) {세 번째}