Swift 사용자 지정 연산자 — 3의 규칙
모든 응용 프로그램에서 아마도 가장 많이 사용되는 수학 연산이기 때문에 언어로 이와 같은 것을 만들겠다는 아이디어를 항상 가지고 있었습니다. 비례 문제에서 알 수 없는 데이터를 계산하기 위해 종이에 이 그래프를 그리던 수학 수업 시간을 기억합니다.
그렇다면 이것이 Swift에서 어떻게 생성될 수 있을까요? 먼저 정리하자면 위의 코드는 일부 코드 서식이 있는 것처럼 보입니다.
이것이 없다면 코드는 다음과 같을 것입니다.
let x = 0.8 -->? 0.4 --> 10
보시다시피 서식과 물음표는 우리가 계산하는 값을 이해하는 데 유용하며 실제로 이것은 하나의 사용자 지정 연산자가 아니라 수학 연산을 형성하는 두 개의 사용자 지정 연산자라는 것을 알 수 있습니다. 기호
-->
는 ->
가 Swift에서 예약된 기호이기 때문에 사용되었습니다.그래서 첫 번째 생각은 맞춤형 삼항 연산자를 만드는 것이었지만 적어도 현재로서는 Swift에서 불가능합니다. 우리가 할 수 있는 것은 두 개의 사용자 지정 연산자를 만드는 것입니다.
-->
는 매우 간단합니다. 왼쪽 값과 오른쪽 값을 튜플링하여 (Double, Double)
를 반환합니다. -->?
연산자는 모든 값을 가지고 있기 때문에 수학 계산을 수행하는 연산자입니다. 그것은 Double
연산자가 정확히 무엇인지 튜플 () -> (Double, Double)
을 반환하는 폐쇄 함수 왼쪽과 오른쪽에 -->
값을 받습니다.infix operator -->?: TernaryPrecedence
func -->?(lhs: Double,
rhs: @escaping @autoclosure () -> (Double, Double)
) -> Double {
return lhs * rhs().1 / rhs().0
}
infix operator -->
func -->(lhs: Double, rhs: Double) -> (Double, Double) {
return (lhs, rhs)
}
let x = 0.8 -->?
0.4 --> 10
https://github.com/nuno-vieira/RuleOf3-CustomOperator-Swift-Playground
분석해 보겠습니다.
→
이 연산자는 설명이 필요 없으며, Double lhs(왼쪽) 인수와 또 다른
Double
rhs(오른쪽) 인수를 사용하여 튜플로 반환합니다(이 경우에는 (0.4, 10)
). 그것은 두 대상에서 작동하기 때문에 중위 연산자이므로 왼쪽 및 오른쪽 인수가 있는 이유입니다. 그리고 우선 순위 그룹을 지정하지 않았기 때문에 여러 작업을 연결하는 데 관심이 없기 때문에 연관성이 없는 기본 그룹이 있습니다.→?
여기에서 모든 마법이 일어납니다 🧙♂️✨. 그것은 또한 중위 연산자입니다. 여기서 lhs 인수에는 알 수 없는 비율로 알고 싶은 값이 있고 rhs에서는 함수를 인수로 받습니다. 나중에 호출하여 알려진 비례 값이 있는 튜플을 제공할 수 있습니다.
-->
키워드는 중괄호 없이 클로저를 작성할 수 있도록 하는 데 중요합니다. 그렇지 않으면 최종 표현식이 대신 다음과 같이 표시됩니다.let x = 0.8 -->? { 0.4 -> 10 }
@autoclosure
는 우리가 원하는 오른쪽 결합성을 가지고 있으므로 오른쪽 표현식이 먼저 평가됩니다.결론
Swift는 Custom Operators로 우리가 매우 창의적이 되도록 했습니다. 이 연산자를 만드는 것은 정말 즐거웠습니다. 하지만 물론 코드베이스에서 고객 연산자를 사용하기로 결정할 때, 특히 여러 개발자로 구성된 팀에서 작업할 때 주의해야 합니다. 우리는 코드베이스를 가능한 한 단순하게 만들고 싶고, 사용자 지정 연산자를 도입하는 것은 신규 사용자를 온보딩하기 더 어려울 것입니다. 우리가 매우 특정한 문제에 대한 DSL을 구축하지 않거나 특정 도메인의 코드베이스를 분명히 개선할 사용자 지정 연산자가 아닌 경우 사용자 지정 연산자를 과도하게 사용하지 않을 것입니다.
Reference
이 문제에 관하여(Swift 사용자 지정 연산자 — 3의 규칙), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nunovieira/swift-custom-operator-the-rule-of-3-32kd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)