해당 포스트를 공부하며 정리한 글입니다.
https://www.pointfree.co/episodes/ep1-functions
Episode #1: Functions
Our first episode is all about functions! We talk a bit about what makes functions special, contrasting them with the way we usually write code, and have some exploratory discussions about operators and composition.
www.pointfree.co
연산자 사용자 정의를 알아보도록 하겠습니다.
|> 는 왼쪽에 입력받은 것을 오른쪽에서 처리하여 출력한다는 뜻의 연산자로 Elixir, Haskell에서 많이 사용하는 연산자입니다.
이것을 Swift 연산자 정의를 통해서 구현하겠습니다.
infix operator |> (중위 연산자 \>를 정의하겠다.)
func |> <A,B>(x:A, f: (A) -> B) -> B { //함수 인자로 A,B라는 제네릭타입으로 받습니다.
return f(x)
}
함수를 파라미터로 받는 것이 아직 어색하지만 함수형 프로그래밍을 한다면 적응해야겠습니다.
이번엔
x를 받아서 1 증가하는 함수를 하나 만들었습니다.
func increase(x: Int) {
return x + 1
}
2를 입력받아서 increase함수에 넣어주면 3을 리턴받게 됩니다.
2 |> increase // 3
만약 increase함수에서 나온 3으로 다시 입력받아 4로 만들고 싶다면 어떻게 해야할까요?
2 |> increase \> increase
increase함수를 |>연산자로 붙이면 될 것 같습니다.
하지만.. 에러가 뜨게됩니다.
연산자에 ( )를 넣어서 우선순위를 정해주면 가능합니다.
(2 |> increase) |> increase // 4
하지만 연산자의 우선순위를 정의한다면 ()를 넣지않고도 사용가능합니다.
연산자 우선순위를 정할 떄는 precedencegroup 라는 키워드를 통해서 정의 가능합니다.
precedencegroup SubstitutionPrecedence {
associativity: left // 연관된 우선순위는 left부터다!
}
다시 숫자 4를만드는 작업를 해보면 ( ) 없이도 사용가능합니다.
infix operator |>: SubstitutionPrecedence
2 |> increase \> increase // 4
'Swift' 카테고리의 다른 글
FP에서 Setter 사용법 (0) | 2022.12.10 |
---|---|
Custom Operator => (0) | 2022.12.02 |
Currying (2) | 2022.11.30 |
ObjectIdentifier을 이용한 DI - 2 (1) | 2022.04.13 |
ObjectIdentifier을 이용한 DI (3) | 2022.04.06 |