너는 2018년에 함수식 프로그래밍을 배워야 한다
그러나 함수식 프로그래밍은 무엇입니까? 왜 모든 사람들이 그것에 반하고, 왜 더 많은 사람들이 그것을 사용하지 않습니까?본고에서, 나는 이 모든 문제에 대답을 시도할 것이며, 당신의 함수식 프로그래밍에 대한 흥미를 불러일으키기를 바랍니다.
함수식 프로그래밍 약사
앞서 말했듯이 함수식 프로그래밍은 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 = λ 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의 미적분, 계산 이론, 심지어 함수 프로그래밍에 대한 소개가 아니기 때문이다.만약 당신이 나로 하여금 어떤 주제를 더욱 깊이 파고들게 하고 싶다면, 평론 부분에서 나에게 메시지를 남겨 주세요.현재 이 섹션에서 얻은 정보는 다음과 같습니다.
함수식 프로그래밍 응용
소프트웨어 개발자로서 우리는 감동적인 시대에 살고 있다. 클라우드의 희망은 마침내 이곳에 왔다. 클라우드가 있으면 우리 모두가 전대미문의 컴퓨터 능력을 얻을 수 있다.불행하게도 그에 따른 확장성, 성능, 병발성 수요도 있다.
대상을 향한 프로그래밍은 더 이상 그것을 절단하지 않는다. 특히 병발성과 병행성에 있어서.이런 언어에 병발성과 병행성을 추가하는 것은 많은 복잡성을 증가시킬 뿐만 아니라 과도한 공정화와 성능 저하를 초래할 수 있다.
다른 한편, 함수 프로그래밍은 이러한 도전에 매우 적합하고 불변 상태, 폐쇄와 고급 함수에 적합하다. 이런 개념들은 고도의 병발과 분포식 응용 프로그램을 작성하는 데 매우 적합하다.
하지만 내 말을 믿지 마라. Whats App과 Discord 등 초창기 회사의 기술 피드백에서 충분한 증거를 찾을 수 있다.
WhatsApp Erlang을 사용하면 팀 엔지니어가 50명에 불과하고 9억 명의 사용자를 지원할 수 있다.
Discord 유사한 방식으로 불로장생약을 사용하여 분당 100만 건이 넘는 요청을 처리한다.
따라서 함수식 프로그래밍은 모든 개발자의 지식 도구 상자에 필요한 도구가 되어야 합니다. 다음 10억 사용자에게 서비스를 제공할 차세대 응용 프로그램을 구축할 준비가 되어 있어야 합니다.만약 이것이 내 함수식 프로그래밍을 믿지 못한다면 정말 재미있을 것이다. Elixir를 봐라.
Reference
이 문제에 관하여(너는 2018년에 함수식 프로그래밍을 배워야 한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/allanmacgregor/you-should-learn-functional-programming-in-2018-4nff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)