[함수형프로그래밍] Higher Order Function (고차 함수)

Higher Order Function (고차 함수)

이 내용은 곰튀김님 Swift로 함수형 프로그래밍 시작하기 강의를 보고 정리한 것임을 알려드립니다.

Swift에서는 Foundation 라이브러리에서 고차함수를 지원하고 있다. 예를 들어, Array에는 filter함수가 있다.

//filter 함수의 정의
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]

이렇게 사용된다.

let arr = [1, 2, 3, 4, 5]
func isOdd(_ number: Int) -> Bool {
    number % 2 == 1
}

let odds = arr.filter(isOdd(_:))

함수를 반환하는 함수

func divide(dividend: Int) -> (Int) -> Int {
    func divid(divisor: Int) -> Int {
        return dividend / divisor
    }
    return divid
}

let quotient = divide(10)(5) // 2

=> 이 함수는 함수를 반환하고 있다. 따라서 함수의 실행결과가 함수이기 때문에 (10)(5) 처럼 두 번 호출해서 최종 값을 얻는다.
=> 또한, 반환값을 변수에 넣으면 그 변수를 함수와 동일하게 사용할 수 있다. 즉 함수(클로저)를 저장하므로 반환 값은 escaping closure(탈출 클로저)이다.

func divide(_ dividend: Int) -> (Int) -> Int {
    return { divisor in
        return dividend / divisor
    }
}
let divideTenBy = divide(10)
let quotient = divideTenBy(5) // 2