Why Coding like This ?—— 귀속 & 매거 중의 귀속

3488 단어

Topic 1:


그룹 xs:[Int]를 입력하여 전체 요소의 합을 구합니다.

Discuss

  • 사고방식1: Hey, 점원, 반복수조, 하나하나 더하기, so easy!

  • Code:
    func sum1(xs:[Int])->Int{
        var sum:Int = 0
        for x in xs{
            sum += x
        }
    }
    
  • 사고방식2: 만약에 이미 대수조구와 함수sum2가 있다고 가정하면 내가 이렇게 분해할 수 있겠는가. sum([2,3,5]) = 2 + sum([3,5]) = 2 + 3 + sum([5]) = 2 + 3 + 5 + sum([]) 우리는 수조를 수원소와 잉여수조 원소로 구성된 수조로 분해하는 방식으로 귀속한다. 나머지 공수조구와 ( 0까지 대수조[2,3,5]의 구화를 완성한다.구체적인 구와 함수를 다시 쓰기 전에 우리는 Array를 작게 확장하고 decompose 계산 속성을 추가해야 한다. 그의 역할은 현재 수조에 대한 분해 결과를 되돌려주는 것이다. 하나의 유형이 (head:T,tail:[T])?인 원조는 수조에 공수조가 존재할 수 있기 때문에 이때 분해는 반드시nil로 되돌려져야 하기 때문에 이 원조가 선택할 수 있는 유형이라는 것을 이해하기 어렵지 않다.

  • code
    extension Array{
        var decompose:(head:T,tail:[T])?{
            //   nil 
            //   
            // [x]   x  []
            return (count > 0) ? (self[0],Array(self[1..

    다음은 귀속을 사용하여sum2 함수를 실현하고 위의 이해를 통해 회색으로 쓰기를 좋아합니다.
    func sum2(xs:[Int])->Int{
        //   nil  0 
        if let (head,tail) = xs.decompose{
            return (head + sum2(tail))  // 
        }else{
            return 0
        }
    }
    

    이상은 귀속에 대한 간단한 맛보기입니다. 다음은 swift2.0 문법에서 처음으로 나타난 매거귀속용법을 이해합니다.

    Topic 2:


    매거진의 귀속 표현식(5+4)*2를 사용하여 값을 구합니다.

    Discuss


    먼저 표현식을 분석하면 주로 숫자(Number)와 연산자+、-、*、/로 나뉘는데 흔히 연산자의 양측은 각각number이다.따라서 만약 매거를 사용한다면 우리는 이렇게 정의할 것이다
    enum ArithmeticExpression{
        case Number(Int)
        indirect case Addition(ArithmeticExpression, ArithmeticExpression)
        indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)
        // 
    }
    
    indirect 키워드를 알아차렸습니까? 이것이 바로 매거 귀속을 지시하는 것입니다.데이터 구조를 정의하려면 표현식 해석에 사용할 함수가 필요합니다. 함수 전입ArithmeticExpression 유형 값은number 귀속 숫자일 수 있습니다. 예를 들어 .Number(5) 은 단일 숫자 5를 나타냅니다.연산자가 좌우로 연결된 연산 데이터일 수도 있다. 예를 들어 .Addition(5,4) = 5 + 4.구체적으로 다음과 같다.
    func evaluate(expression: ArithmeticExpression) -> Int {
        switch expression {
        case .Number(let value):
            return value
        case .Addition(let left, let right):
            return evaluate(left) + evaluate(right)
        case .Multiplication(let left, let right):
            return evaluate(left) * evaluate(right)
        }
    }
    //   (5 + 4) * 2
    let five = ArithmeticExpression.Number(5)
    let four = ArithmeticExpression.Number(4)
    let sum = ArithmeticExpression.Addition(five, four)
    let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2))
    print(evaluate(product))
    // prints "18"
    

    정부에서 제시한 예는 많은 친구들을 실망시킬 수 있다. 이것은 완전한 전입 표현식이 당신에게 값을 주는 예는 아니지만, 매거진의 귀속을 이해하게 한다.
    참, 위 코드는 Xcode7 새 버전 베타에서만 실행할 수 있습니다.그렇지만!네, 코드를 swift1.2 문법에도 똑같이 적용하는 방법이 있습니다. 단지 작은 봉인이 필요합니다.
    class Box{
        let unbox : T
        init(_ value:T){self.unbox = T}
    }
    // swift1.2 
    enum enumTypeError{
        case type1(NSError)
        case type2(T)
    }
    // 
    enum enumTypeSuccess{
        case type1(NSError)
        case type2(Box)
    }
    //   challenge!
    

    이 책은 공식 문서와 Functional Programming in swift를 참고하여 학습 노트로만 공유합니다.솔직히 이 글은 약간 물의가 있다. 사실 이전에는 scroll View의 비밀 문장을 먼저 만들고 주방장이 소를 풀고 기초부터 모든 것을 이야기하고 싶었지만 어쩔 수 없이 다 쓴 후에 물을 약간 흘렸다. 많은 사람들이 자신이 알지만 표현하지 못했기 때문에 다시 만들 생각이다!머지않아 여러분을 만날 수 있을 거라고 믿습니다.그리고 swift2.0의 최신 문법은 github에 업데이트되었습니다. 공식 8.24 최신 버전입니다.github 주소, 스타에서 당신도 나의 마이크로 블로그 주소에 관심을 가질 수 있기를 바랍니다.

    좋은 웹페이지 즐겨찾기