안녕하세요 남갯입니다
오늘은 코틀린의 higher order function에 대해 포스팅해보려고합니다.
- higher order function 이란?
higher order function은 간단하게 두개를 만족하는 함수를 일컫습니다.
1. 함수에 파라미터로 전달하는 함수
2. 함수를 반환(리턴)하는 함수
higher order function이 되기위해선 일급객체(first class citizen)가 되어야합니다.
- 일급객체(firstclass citiezen) 이란?
일급객체란 아래의 조건을 만족하는것을 말합니다.
1. 변수나 데이터 할당 할 수 있어야한다.
val test1: () -> Unit = { println("firstCitizen") }
// firstCitizen
2. 객체의 인자로 넘길 수 있어야한다.
val test2: (Int) -> Unit = { println("firstCitizen : ${it}") }
fun mytest(f: () -> Unit) {
f.invoke()
}
mytest { Main.test2(1000) }
// firstCitizen : 1000
3. 객체의 리턴값으로 리턴 할 수 있어야한다.
fun mtest(): () -> Unit {
return { println("firstCitizen") }
}
- 출처 : https://medium.com/@lazysoul/functional-programming-%EC%97%90%EC%84%9C-1%EA%B8%89-%EA%B0%9D%EC%B2%B4%EB%9E%80-ba1aeb048059
- higher order function 사용
함수의 인자로 아래와같이
fun calculator (result : (Int,Int) -> Int) : Int{
return result(1,2)
}
calculator를 만들었습니다.
여기에다가 넣을 sum함수를 만들어 보도록 하겠습니다.
fun sum(a : Int , b : Int) = a + b
//or
fun sum(a : Int , b : Int) = {a + b}
1. 이런 함수를 생성하고 메소드 레퍼런스를 이용해 아래와같이 표현하던지
calculator(::sum)
2. 전달해줄 인자를 생성해서 넘겨주셔도 됩니다.
val s: (Int, Int) -> Int = { a, b -> a + b }
calculator(s)
3. 바로 생성해서 넘겨주셔도 됩니다.,
calculator({ a, b -> a + b })
출처 : https://medium.com/@lazysoul/high-order-function-%EA%B3%A0%EC%B0%A8%ED%95%A8%EC%88%98-22b147d0c4a5
https://thdev.tech/kotlin/2017/10/02/Kotlin-Higher-Order-Function/
'IT > kotlin' 카테고리의 다른 글
[드로이드나이츠] 뱅크샐러드 코틀린던전 1번문제 (2) | 2019.04.08 |
---|---|
[kotlin] 제너릭 변성(variance) 정리 (1) | 2019.03.26 |
[fold 함수] fold 함수 알아보기 (0) | 2019.02.19 |
[Kotlin] 코틀린 스트림 함수 (map, flatMap, groupBy, filter, take, drop, first, distinct, zip, joinToString, count, any, none, max, min, average) (2) | 2019.01.03 |
[Kotlin] 코틀린 클래스 (Data Class)와 한정 클래스 (Sealed Class), Getter / Setter (0) | 2018.12.26 |