함수식 프로그래밍의 8대 장점


이 게시물Top 8 Benefits of Functional Programming은 처음Qvault에 실렸다.
함수식 프로그래밍은 코드를 작성하는 방법으로 그 중에서 프로그램은 함수를 엄격하게 통해 만들어진다.최근 몇 년 동안 함수식 프로그래밍은 개발 지역사회에서 상당히 큰 흡인력을 얻었는데, 주로 그것이 제공하는 이점 때문이다.
함수식 프로그래밍은 정확한 코드를 증명할 수 있는 성명 방식을 작성하는 것이다.함수 정의는 프로그램 상태를 업데이트하는 일련의 문장이 아니라 입력을 출력에 간단하게 비추는 표현식이다.8가지 가장 중요한 원인으로 넘어가자. 함수식 인코딩을 연구하거나 완전 함수식 프로그래밍 언어로 전환해야 한다.

함수식 프로그래밍의 장점

  • Pure functions are better than impure functions
  • Pure functions are easier to test
  • Functional programming leads to fewer bugs
  • Functional code tends to have its state isolated, making it easier to comprehend
  • Function signatures are more trusted
  • Concurrency is more easily kept safe
  • Recursion is simpler, though not necessarily easier to learn
  • Immutable variables lead to fewer side-effects
  • 1. 순수함수가 불순함수보다 낫다


    Apure function는 다음 두 가지 속성을 가진 함수입니다.
  • 동일한 매개 변수의 반환 값은 동일합니다(로컬 정적 변수, 비 로컬 변수, 가변 참조 매개 변수 또는 입출력 장치에서 오는 입력 흐름과 변경되지 않음).
  • 그 평가에는 부작용(국부 정적 변수, 비국부 변수, 가변 인용 파라미터 또는 입출력 흐름에 돌연변이가 없음)이 없다.
  • 순수함수는 외부 프로그램의 상태가 바뀌지 않도록 하기 때문에 가능한 한 순수함수를 작성하는 것이 순수함수를 작성하는 것보다 훨씬 낫다.그러나 일부 상황에서 네트워크 호출을 하거나 데이터베이스와 상호작용을 하거나 데이터를 컨트롤러에 출력하려면 불순한 함수를 사용해야 한다.

    2. 순수함수는 테스트하기 쉽다



    순수 함수는 두 가지 이유로 테스트하기 쉽다.
  • 주어진 입력에 대해 출력은 항상 같다.이것은 결정론과 예측성을 확보했다.
  • 순수함수는 입력 이외의 어떤 상태에도 의존하지 않기 때문에 좋은 테스트 세트를 작성할 때 비계를 세울 필요가 없다.
  • 테스트는 프로그래밍에서 매우 중요하기 때문에, 우리가 테스트를 더욱 쉽게 작성할 때, 이것은 정말 좋다. 왜냐하면 이것은 우리가 더 많은 테스트를 작성하도록 격려하기 때문이다.가능한 한 순수 함수를 많이 사용하면 프로그램이 더 튼튼한 테스트 도구를 가지고 있음을 알 수 있습니다.

    3. 함수식 프로그래밍으로 인한 오류 감소


    순수 함수를 사용하면 디버깅과 오류가 적은 코드를 작성하는 것이 더욱 쉽다.모든 함수는 출력에 입력된 맵일 뿐이기 때문에, 각 단계의 간단한 창고 추적이나 인쇄 문장에 문제가 발생할 수 있습니다.명령식 범례를 사용하면 코드 라이브러리에서 오류가 발생할 수 있는 거의 모든 곳에서 공유할 수 있습니다.

    4. 함수 코드의 상태는 왕왕 고립되어 있기 때문에 이해하기 쉽다


    Elm architecture를 예로 들자.Elm은 응용 프로그램 전면에 웹 페이지를 보여주는 순함수식 프로그래밍 언어이다.

    Elm 코드는 순전히 기능적이다.이것은 'state' 를 입력으로 하고, 페이지에 나타나는 HTML로 변환합니다.사용자가 페이지와 상호 작용할 때마다 Elm 코드 외부에서 상태가 업데이트됩니다.그런 다음 상태를 Elm 코드로 피드백하고 새 HTML 출력을 생성합니다.
    시스템의 상태 부분은 순수한 기능이 아니라는 것을 깨달았을 수도 있습니다. 좋은 소식은 매우 간단하고 버그가 존재할 수 없다는 것입니다.그러나 대부분의 작업을 완성한 Elm 코드는 순전히 기능적이기 때문에 대부분의 코드 라이브러리는 모든 이익을 얻을 수 있다.

    5. 함수 서명이 더 신뢰할 수 있음


    다음 Go 코드를 확인합니다.
    var radius = 2.0
    
    func areaOfCircle() float64 {
        return 3.14 * radius * radius
    }
    
    기술적으로 말하자면, 이 코드는 작용할 것이다.내가 어느 곳에서든 원의 면적을 계산하기만 한다면, 내가 먼저 전체 radius 변수를 갱신하면, 나는 정확한 출력을 얻을 수 있다.문제는 함수의 서명을 검사하는 것이 모든 상황을 설명할 수 없다는 점이다.순수함수는 서명을 해서 당신이 알아야 할 모든 사용법을 알려 줍니다.
    // we don't know which circle's area is being computed, there's no explicit input
    func areaOfCircle() float64
    
    우리는 함수를 순수하게 함으로써 이 문제를 해결할 수 있다.
    func areaOfCircle(radius float64) float64 {
        return 3.14 * radius * radius
    }
    

    6. 병발하면 안전을 유지하기 쉽다


    순함수 정의상 라인이 안전합니다.같은 데이터를 동시에 접근하려는 두 개의 병렬 프로세스가 없을 때 코드는 안전하다.이것은 경쟁 조건이라고 불리며 가장 확정하기 어려운 허점 중의 하나다.순수함수는 프로그램의 다른 부분과 공유되지 않기 때문에 경쟁 조건이 있을 수 없다.
    예를 들어 위의 코드를 다시 사용합니다.
    var radius = 2.0
    
    func areaOfCircle() float64 {
        return 3.14 * radius * radius
    }
    
    만약 두 개의 단독 루틴 (goroutines 이 동시에 areaOfCircle 함수에 접근하고 radius 의 값을 변경한다면, 한 프로세스는 다른 프로세스의radius 값을 덮어쓰기 쉽고, 한 프로세스의 출력은 다른 루틴을 위한 것이다.

    7. 귀환이 더 간단하지만 반드시 쉽게 공부할 수 있는 것은 아니다


    만약 당신이 프로그래밍 언어를 위해 해석기를 작성해 본 적이 있다면, 귀속은 적어도 순환과 같은 명령식 사상에 비해 상당히 실현하기 쉬운 개념이라는 것을 깨닫게 될 것이다.귀환은 함수만 자신을 호출할 수 있고 나머지는 개발자가 결정한다.For 순환은 초기화, 종료 조건 검사, 주체 실행, 업데이트 문장을 최종적으로 실행하는 해석기나 컴파일러에 사용자 정의 코드를 사용해야 합니다.
    for (initialization; condition; update) {
        // body of for loop, executed once per iteration
    }
    
    비록 귀환이 더 간단하지만, 새 프로그래머에게는 통상적으로 그것을 이해하기 어렵다는 것을 나는 기꺼이 인정한다.다음pow 함수의 예시를 보십시오. 이 함수는 x의 결과를 n 차원으로 향상시킵니다.

    명령식 멱 함수


    function pow(x, n) {
        let res = 1;
        for (let i = 0; i < n; i++) {
            res *= x;
        }
        return res;
    }
    

    함수 멱 함수


    function pow(x, n) {
        if (n === 1) {
            return x;
        }
        return x * pow(x, n - 1);
    }
    

    8. 변하지 않는 변수는 더 적은 부작용을 초래할 수 있다


    함수 프로그램 함수 중의 데이터는 변할 수 없다.우리는 항상 새로운 변수와 데이터 구조를 만들 수 있지만, 기존의 값을 수정할 수 없습니다.
    만약 프로그램의 모든 값이 한 번만 분배된다면, 코드를 읽고 주어진 값에 대해 확인하는 것은 매우 쉽다.만약 대신 이름을 업데이트할 수 있는 값을 허용한다면 코드에서 동행하지 않는 것을 보는 것은 훨씬 어려울 것이다.요컨대 불변성은 프로그램을 더욱 간단하게 하고 개발 속도를 높였다.
    이 점을 감안하면 불변성은 나쁜 생각인 경우도 있다.응용 프로그램이 성능을 필요로 하고 값을 계속 업데이트할 때 가장 보편적입니다.게임을 상상해 보세요. 당신의 캐릭터 크기가 끊임없이 변동합니다.캐릭터의 크기가 바뀔 때마다 전체 캐릭터를 풀어주고 다시 만드는 것은 상당히 큰 계산 부담이다.이런 상황에서 가변 데이터를 사용하는 것은 가치가 있을 수 있다.

    어떤 언어가 순수 함수식 프로그래밍 언어입니까?


    다음 언어는 순수 함수식 스타일을 지원합니다.다시 말하면 이 언어는 함수식 프로그래밍의 규칙을 실행한다.
  • Haskell
  • Clojure
  • Scala
  • PureScript
  • Elm
  • 또한 Go, JavaScript, Python 등 대부분의 일반 프로그래밍 언어에서 기능성 프로그램을 작성할 수 있지만, 강요하지는 않습니다.

    읽어주셔서 감사합니다!


    만약 당신의 CS 경력을 더욱 발전시키는 데 관심이 있다면, 저희를 선택하십시오 computer science courses
    질문이나 댓글이 있으면 트위터에 연락 주세요. 저희가 잘못을 저질렀다면 반드시let us know 잘못을 바로잡을 수 있도록 하세요!
    Subscribe 우리 시사통신을 클릭하여 더 많은 프로그래밍 문장을 얻기

    좋은 웹페이지 즐겨찾기