너는 2018년에 함수식 프로그래밍을 배워야 한다

함수식 프로그래밍은 이미 오랫동안 존재했고 50년대부터Lisp프로그래밍 언어를 도입했다.만약 당신이 지난 2년 동안 계속 관심을 가지고 있었다면, Clojure, Scala, Erlang, Haskell, Elixir 같은 언어는 줄곧 많은 소음을 만들어 대량의 관심을 불러일으켰다.
그러나 함수식 프로그래밍은 무엇입니까? 왜 모든 사람들이 그것에 반하고, 왜 더 많은 사람들이 그것을 사용하지 않습니까?본고에서, 나는 이 모든 문제에 대답을 시도할 것이며, 당신의 함수식 프로그래밍에 대한 흥미를 불러일으키기를 바랍니다.

함수식 프로그래밍 약사


앞서 말했듯이 함수식 프로그래밍은 50년대에 시작되어 IBM700/7000 시리즈 과학 컴퓨터에 사용되는 Lisp를 만들었다.Lisp는 우리가 현재 함수식 프로그래밍과 관련된 많은 범례와 특성을 도입했다. 비록 우리는 Lisp를 함수식 프로그래밍의 시조라고 할 수 있지만, 우리는 심지어 모든 함수식 프로그래밍 언어 간의 공통된 뿌리인 Lambda 연산을 더욱 연구할 수 있다.

이것은 지금까지 함수식 프로그래밍의 가장 재미있는 부분이다.모든 함수식 프로그래밍 언어는 같은 간단한 수학 기초인 Lambda 연산을 바탕으로 한다.

Lambda calculus is Turing complete, that is, it is a universal model of computation that can be used to simulate any single-taped Turing machine.[1] Its namesake, the Greek letter lambda (λ), is used in lambda expressions and lambda terms to denote binding a variable in a function. -- Wikipedia


Lambda 미적분은 놀랍게도 간단하지만 강력한 개념이다.lambda 연산의 핵심에서 우리는 두 가지 개념을 가지고 있다.

  • 함수 추상은 명칭(변수)을 도입하여 표현식을 범화시킨다.

  • 함수 응용 프로그램, 특정 값에 이름을 붙여서 광의적 표현식을 계산하는 데 사용됩니다.
  • 단일 매개 변수 함수 f가 매개 변수를 하나 증가시키는 예시를 살펴보겠습니다.
    f = λ x. x+1
    
    만약 우리가 함수를 숫자 5에 응용해야 한다고 가정한다.다음 방법으로 함수를 읽을 수 있습니다.
    f(5) => 5 + 1
    

    함수 프로그래밍 기초


    이제 함수식 프로그래밍을 강력한 개념으로 만드는 기능을 살펴보겠습니다.

    일급 함수


    함수식 언어에서 함수는 일급 공민이다. 이것은 함수가 변수에 저장될 수 있다는 것을 의미한다. 예를 들어elixir에서는 이렇게 보인다.
    double = fn(x) -> x * 2 end
    
    따라서 다음과 같은 함수를 쉽게 호출할 수 있습니다.
    double.(2)
    

    고급 함수


    고급 함수는 하나 이상의 함수를 매개 변수로 하거나 새 함수로 되돌려주는 함수로 정의됩니다.이 개념을 설명하기 위해 이중 함수를 다시 사용합니다.
    double = fn(x) -> x * 2 end
    Enum.map(1..10, double)
    
    이 예에서 매거하다.맵은 매개 가능한 목록을 첫 번째 매개 변수로 하고 우리가 방금 정의한 함수를 두 번째 매개 변수로 합니다.이 함수는 다음과 같이 열거할 수 있는 각 요소에 적용됩니다.
    [2,4,6,8,10,12,14,16,18,20]
    

    불변 상태


    함수식 프로그래밍 언어에서 상태는 변하지 않는다. 이것은 변수가 특정한 값에 귀속되면 다시 정의할 수 없다는 것을 의미한다. 이것은 부작용과 경쟁 조건을 방지하는 좋은 장점을 가진다.병렬 프로그래밍을 더욱 쉽게 하다.
    이전과 마찬가지로 Elixir를 사용하여 이 개념을 설명합니다.
    iex> tuple = {:ok, "hello"}
    {:ok, "hello"}
    iex> put_elem(tuple, 1, "world")
    {:ok, "world"}
    iex> tuple
    {:ok, "hello"}
    
    이 예에서 우리의 모듈은 영원히 값을 바꾸지 않습니다. 세 번째 줄에서put_elem은 원시 모듈의 값을 수정하지 않고 새로운 모듈을 되돌려줍니다.
    나는 더 많은 세부 사항을 깊이 있게 토론하지 않을 것이다. 왜냐하면 이 글은 lambda의 미적분, 계산 이론, 심지어 함수 프로그래밍에 대한 소개가 아니기 때문이다.만약 당신이 나로 하여금 어떤 주제를 더욱 깊이 파고들게 하고 싶다면, 평론 부분에서 나에게 메시지를 남겨 주세요.현재 이 섹션에서 얻은 정보는 다음과 같습니다.
  • 함수식 프로그래밍이 오랫동안 존재해 왔다(50년대 초)
  • 함수 프로그래밍은 수학 개념을 바탕으로 하고 특히 Lambda연산
  • 명령식 언어
  • 에 비해 함수식 프로그래밍은 너무 느리다고 여겨진다
  • 함수식 프로그래밍이 권토중래하고 있다.
  • 함수식 프로그래밍 응용


    소프트웨어 개발자로서 우리는 감동적인 시대에 살고 있다. 클라우드의 희망은 마침내 이곳에 왔다. 클라우드가 있으면 우리 모두가 전대미문의 컴퓨터 능력을 얻을 수 있다.불행하게도 그에 따른 확장성, 성능, 병발성 수요도 있다.
    대상을 향한 프로그래밍은 더 이상 그것을 절단하지 않는다. 특히 병발성과 병행성에 있어서.이런 언어에 병발성과 병행성을 추가하는 것은 많은 복잡성을 증가시킬 뿐만 아니라 과도한 공정화와 성능 저하를 초래할 수 있다.
    다른 한편, 함수 프로그래밍은 이러한 도전에 매우 적합하고 불변 상태, 폐쇄와 고급 함수에 적합하다. 이런 개념들은 고도의 병발과 분포식 응용 프로그램을 작성하는 데 매우 적합하다.
    하지만 내 말을 믿지 마라. Whats App과 Discord 등 초창기 회사의 기술 피드백에서 충분한 증거를 찾을 수 있다.

  • WhatsApp Erlang을 사용하면 팀 엔지니어가 50명에 불과하고 9억 명의 사용자를 지원할 수 있다.

  • Discord 유사한 방식으로 불로장생약을 사용하여 분당 100만 건이 넘는 요청을 처리한다.
  • 함수식 프로그래밍의 장점으로 인해 이런 거대한 성장에 대응할 수 있고 함수식 프로그래밍에 따라 점점 더 많은 흡인력을 얻을 수 있다.나는 Whats App과 Discord 같은 이야기가 점점 보편화될 것이라고 굳게 믿는다.
    따라서 함수식 프로그래밍은 모든 개발자의 지식 도구 상자에 필요한 도구가 되어야 합니다. 다음 10억 사용자에게 서비스를 제공할 차세대 응용 프로그램을 구축할 준비가 되어 있어야 합니다.만약 이것이 내 함수식 프로그래밍을 믿지 못한다면 정말 재미있을 것이다. Elixir를 봐라.
  • Introduction to Elixir
  • Learn Elixir the fun way
  • 4 Reasons We're Having Fun Programming Elixir
  • 마지막으로 이 주제에 대한 더 많은 정보를 알고 싶으면 주저하지 말고 아래에 댓글을 남겨주세요.

    좋은 웹페이지 즐겨찾기