- lambda
람다는 함수를 만드는 expression 이다.
함수의 이름을 정의하지 않는다. 이름 없이 함수를 사용할 수 있다. 그래서 anonymous function 이라고도 불린다.
람다는 데이터로 전달될 수 있다.
var dirtyLevel = 20
val waterFilter = { dirty : Int -> dirty / 2}
println(waterFilter(dirtyLevel))
위와 같이 람다를 정의할 수 있는데 -> 왼쪽에는 parameter 가 있고 뒤에는 return 이 있다. 함수를 가지는 변수를 만들고 호출할 수도 있다.
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
위와 같이 type 도 더 명확하게 지정해줄 수 있다.
- higher-order function
람다를 다른 함수에 전달함으로서 higher-order function 을 만들 수 있다. higher-order function 에는 대표적으로 filter 와 map 이 있다.
fun main () {
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
println(updateDirty(30, waterFilter))
println("-------")
println(updateDirty(30) { dirty ->
dirty / 2
})
println("-------")
println(updateDirty(30) {
it / 2
})
}
fun updateDirty(dirty: Int, operation: (Int) -> Int): Int {
return operation(dirty)
}
// 모든 결과가 15로 동일하게 나온다.
람다를 함수의 parameter type 으로 지정하고 argument 로 사용하고 있다.
람다가 아닌 인자와 반환이 같은 regular named function 을 전달해도 된다. 다만 :: 연산자를 앞에 뭍여서 regular function 임을 알린다. 아래는 이 내용이 추가된 코드이다.
fun main () {
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
println(updateDirty(30, waterFilter))
println("-------")
println(updateDirty(30) { dirty -> dirty / 2 })
println("-------")
println(updateDirty(30) { it / 2 })
println("-------")
println(updateDirty(30, ::increaseDirty))
}
fun updateDirty(dirty: Int, operation: (Int) -> Int): Int {
return operation(dirty)
}
fun increaseDirty( start: Int ) = start + 1
추가로 위 코드에서 updateDirty(30) { dirty -> dirty / 2 } 나 updateDirty(30) { it / 2 } 처럼 람다를 괄호 밖으로 빼주는 것을 last parameter call syntax 라고 부른다.
lambda, higher-order function 의 대표 예시라고 볼 수 있는 scope function 에 대해 더 자세히 알고 싶다면 아래 링크를 확인하면 좋겠다.
https://nosorae.tistory.com/26
-출처 : codelabs
'Kotlin' 카테고리의 다른 글
[Kotlin] 접근제어자 ( visibility modifiers ) (0) | 2021.08.04 |
---|---|
[Kotlin] Class (constructor, getter/setter, companion object) 기초 (0) | 2021.08.04 |
[Kotlin] 함수 기초 (선언, 반환, default value, compact functions) (0) | 2021.08.03 |
[Kotlin] 리스트, 배열, 반복문에서 흥미로웠던 부분 (0) | 2021.08.03 |
[Kotlin] 기존 클래스의 확장함수 사용 (0) | 2021.07.18 |