람다 함수
람다 함수는 그 자리에서 곧바로 함수를 만드는 간단한 방법입니다. 타입추론 기능과 암묵적 it 변수 덕분에 매우 간결하게 람다 함수를 작성할 수 있습니다.
fun main() {
//sampleStart
// 이하 모든 예제는 주어진 문자열을 대문자로 바꿉니다.
// 즉, 모두 String을 받아서 String을 반환하는 함수입니다.
val upperCase1: (String) -> String = { str: String -> str.uppercase() } // 1
val upperCase2: (String) -> String = { str -> str.uppercase() } // 2
val upperCase3 = { str: String -> str.uppercase() } // 3
// val upperCase4 = { str -> str.uppercase() } // 4
val upperCase5: (String) -> String = { it.uppercase() } // 5
val upperCase6: (String) -> String = String::uppercase // 6
println(upperCase1("hello"))
println(upperCase2("hello"))
println(upperCase3("hello"))
println(upperCase5("hello"))
println(upperCase6("hello"))
//sampleEnd
}
- 람다 함수의 모든 요소에 타입을 명시했습니다. 람다 본문은 중괄호 안에 작성했고,
(String) -> String타입의 변수에 지정했습니다. - 람다 안쪽에 타입추론 기능을 활용했습니다. 지정되는 변수의 타입으로부터 람다의 타입을 추론할 수 있습니다.
- 람다 바깥으로 타입추론이 이어졌습니다. 람다의 파라미터와 반환 타입으로부터 바깥으로 변수의 타입이 추론되었습니다.
- 둘 다 추론을 할 수는 없습니다. 컴파일러가 어떤 타입인지 추론할 방법이 없습니다.
- 파라미터 한 개를 받는 람다의 경우, 별도로 이름을 주지 않고, 암묵적으로
it변수를 사용할 수 있습니다.it의 타입을 추론할 수 있는 경우에 특히 더 유용하게 쓰입니다. - 람다가 딱 한 번의 함수 호출로 구성된다면, 함수를 지칭하는 (
::) 표기법으로 선언할 수 있습니다.