본문 바로가기

Programming Paradigm/Functional Programming4

커링 (Currying) 20세기 수학자인 Haskell Curry 등의 작업으로 수학에서 유래한 언어 기술 여러개의 파라미터를 받는 함수를 하나의 파라미터를 받는 여러 개의 함수로 쪼개는 것 func multiply(_ a: Int) -> (Int) -> Int { return { b in return a * b } } let area = multiply(10)(20) //200 커링을 하는 이유 함수의 합성을 원활하게 하기 위해서 입니다. 함수의 Output이 다른 함수의 Input으로 연결되면서 합성될 때 함수들이 서로 chain을 이루면서 연속적으로 연결이 되려면, Output과 Input의 타입과 갯수가 같아야 합니다. 함수의 Output은 하나밖에 없으니 Input 또한 모두 하나 씩만 갖도록 한다면 합성하기가 쉬워질.. 2020. 6. 16.
비동기 반환 (Async Result) 연산이 오래 걸리거나, 네트워크를 통해서 결과를 얻거나, 딜레이가 포함되어 있는 내용은 비동기(async) 방식으로 결과는 나중에 생길 때 전달받기로 하고 프로그램의 수행을 멈추지 않는 방식으로 함수를 구현하는 것이 좋습니다. // 동기 func syncFunc(_ nums: [Int]) -> Int { sleep(1) let sum = nums.reduce(0, +) return sum } // 비동기 func asyncFunc(_ nums: [Int], _ result: @escaping (Int) -> Void) { print("sleep......3") DispatchQueue.main.async { sleep(3) let sum = nums.reduce(0, +) result(sum) // 결과.. 2020. 3. 5.
함수형 프로그래밍 : 합성 (Composition) 함수의 반환값이 다른 함수의 입력값으로 사용되는 것 func f1(_ i: Int) -> Int { return i * 2 } func f2(_ i: Int) -> String { return "\(i)" } let result = f2(f1(100)) /// 1급개체로서의 함수를 합성하는 예제 func ff(_ pf1: @escaping (Int) -> Int, _ pf2: @escaping (Int) -> String) -> (Int) -> String { return { i in // i == 100 // 100 -> 200 -> "200" return pf2(pf1(i)) } } let f3 = ff(f1, f2) let result2 = f3(100) // 합성된 함수를 한번에 사용 /// ge.. 2020. 1. 25.
Swift로 함수형 프로그래밍 시작하기 Swift로 함수형 프로그래밍 시작하기 링크: http://programmers.co.kr/learn/courses/4806 파트1. 함수형 프로그래밍 소개 현재의 프로그래밍 패러다임은 "동시성"이라는 관점으로 옮겨지고 있다. OOP에 가려서 주목을 받지 못하던 FP(함수형 프로그래밍)이 다시 주목을 받는 이유 프로그램 외부 효과를 주지 않는 방법으로 동시성 문제를 해결할 수 있기 때문 FP에 대한 오해들 프로그래밍 기법들 != FP Immutable Data Higher Order Function Currying Map Filter Reduce Side-Effect Free Programming == FP FP가 OOP를 대체할 수 있을까? OOP와 FP에 대해 잘 이해하고 현재 내가 당면한 문제를 해.. 2018. 12. 30.