Fold, Reduce
kotlin의 fold함수와 reduce함수 무었이 다를까요 ?
한번 알아보도록 하겠습니다!
Fold
public inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R {
var accumulator = initial
for (element in this) accumulator = operation(accumulator, element)
return accumulator
}
fold 함수는 누산기의 기능을 합니다.
fold함수의 구현을 보면
우선 fold함수는 T타입을 받아서 R타입으로 리턴합니다.
매개변수로는 initial 과 operation이 있습니다 .
initial 을 리턴값R을 초기화 하는 값을 받습니다 .
operation실행할 함수를 넘겨받습니다 .
그리고 Iterable을 반복하여 누산기에 리턴값을 더합니다.
간단한 예를 보자면
listOf(1, 2, 3).fold(0) { sum, element -> sum + element }
정수배열에서 fold함수를 호출하면 , 0으로 초기화하고 1,2,3을 더한 값 6이 최종적으로 나오게 됩니다 .
Reduce
public inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S {
val iterator = this.iterator()
if (!iterator.hasNext()) throw UnsupportedOperationException("Empty collection can't be reduced.")
var accumulator: S = iterator.next()
while (iterator.hasNext()) {
accumulator = operation(accumulator, iterator.next())
}
return accumulator
}
reduce함수는 인자 T타입을 받아 S 타입으로 반환합니다.
매개변수로 operation 함수를 넘겨받아 while문을 돌면서 누산합니다 .
listOf(1, 2, 3).reduce { sum, element -> sum + element }
간단한 예로 위와 1,2,3을 더한 값 6이 최종적으로 나오게됩니다 .
위 두함수 fold와 reduce 굉장히 비슷합니다 .
둘의 차이는 초기값을 받는지 아닌지 입니다 .
'Kotlin' 카테고리의 다른 글
Kotlin Property , Custom Getter & Setter (2) | 2019.10.07 |
---|---|
Sealed Class (0) | 2019.09.02 |
고차함수 (Higher-order-function) ,1급시민[객체,함수] (First-Class Citizen) (0) | 2019.08.29 |
Reflection (0) | 2019.06.08 |
Kotlin 코드 Java로 디컴파일하기 (4) | 2019.03.09 |
댓글