Kotlin
람다 & 고차함수
함수를 일급 객체로 다루는 Kotlin의 함수형 프로그래밍 핵심.
// 함수 타입
val double: (Int) -> Int = { n -> n * 2 }
val greet: (String) -> String = { "Hello, $it!" } // it: 단일 파라미터
val add: (Int, Int) -> Int = { a, b -> a + b }
// 고차함수 — 함수를 파라미터로 받기
fun transform(list: List<Int>, fn: (Int) -> Int) =
list.map(fn)
// 고차함수 — 함수를 반환하기
fun multiplier(factor: Int): (Int) -> Int = { it * factor }
// 함수 합성
infix fun <A, B, C> ((A) -> B).then(g: (B) -> C): (A) -> C =
{ g(this(it)) }
// 메서드 참조
fun isPositive(n: Int) = n > 0
val nums = listOf(-3, -1, 0, 2, 5)
val pos = nums.filter(::isPositive)
val strs = nums.map(Int::toString)
fun main() {
println(transform(listOf(1,2,3), double)) // [2, 4, 6]
println(transform(listOf(1,2,3)) { it * it }) // trailing lambda
val triple = multiplier(3)
println(triple(7)) // 21
val process = double then { it + 1 } then { "$it!" }
println(process(5)) // "11!"
}