- 기본 아이디어
- 형질
- 순수한 기능
- 일류 기능
- 참조 투명성
- 재귀
- 불변성
- 예
- 명령 적 및 선언적 접근 방식
- 순수한 기능
- 일류 객체로서의 기능
- 이점
- 짧고 이해하기 쉬움
- 제어 흐름 없음
- 단점
- 응용
- 기능적 방법론
- 함수형 프로그래밍을 지원하는 언어
- 디
- 얼랑
- Haskell
- ML
- 목표 Caml
- 계획
- 참고 문헌
함수형 프로그래밍 패턴 프로그래밍에 대응이 필수적 프로그래밍의 주요 개념 프로세서에 지시의 기능 수학적 모델보다는 명시 적 시퀀스로 프로그램의 동작을 진술의 개념을 기반으로합니다.
기능적 언어는 명령문을 실행하기보다는 명령문과 용어를 강조합니다. 이 프로그래밍에서 결과는 로컬 또는 글로벌 상태를 따르는 다른 유형과 달리 함수에 전달되는 매개 변수에만 의존합니다.
Haskell 함수형 프로그래밍 언어에서 매핑 함수가 작동하는 방식을 보여주는 다이어그램. 출처 : Pluke 작성-자체 작업, CC0 commons.wikimedia.org.
그 이름은 입력 세트를 출력 세트에 할당하는 수학 함수에서 유래합니다. 수학 함수는 실제로 어떤 작업도 수행하지 않고 오히려 공식을 통해 함수에서 입력 집합이 생성하는 것을 설명하는 프로세스 모델을 설명합니다.
기본 아이디어
함수형 프로그래밍의 기반은 함수를 정의하고 적용하기 위해 20 세기의 30 년 동안 개발 된 람다 미적분이었습니다. LISP는 1960 년에 설계된 최초의 프로그래밍 언어였습니다.
대부분의 프로그래밍 언어는 함수 내에서 설정하거나 사용할 수있는 입력, 출력 및 외부 변수로 구성되지만 함수형 프로그래밍에서는이를 방지합니다. 아이디어는 동일한 매개 변수를 사용하여 함수를 호출 할 때마다 동일한 값을 반환해야한다는 것입니다.
형질
함수형 프로그래밍 언어는 정의가 계산 방법이 아닌 계산 대상을 지정하기 때문에 선언적 및 비절 차적뿐만 아니라 함수가 매개 변수에 적용되기 때문에 애플리케이션이라고합니다.
순수한 기능
함수는 외부 변수 변경, 파일 시스템 변경 등과 같은 관찰 가능한 부작용이없는 경우 순수합니다.
이러한 함수는 코드의 다른 부분이 어느 시점에 의존 할 수있는 변수를 명시 적으로 변경하지 않기 때문에 설득력있는 것으로 간주됩니다. 이러한 제약 조건으로 코딩하는 것은 어색해 보이지만 이러한 함수는 결정적이고 예측 가능하며 구성 가능한 것으로 간주되어야합니다.
일류 기능
함수는 변수에 할당 할 수있는 값으로 간주되므로 다른 함수로 전달되고 반환 될 수 있습니다. 즉, 함수는 마치 매개 변수 인 것처럼 사용되거나 반환되는 값으로 사용될 수 있습니다.
이것은 단순히 함수의 결과가 아니라 함수가 그대로 전달 될 수 있음을 의미합니다. 예를 들어 입력 매개 변수 값의 두 배를 반환하는 double (x) 함수를 생각해보십시오. 따라서 double (2)은 4를 반환합니다.
1 급 함수이므로 코드 (double (double (2)))는 double (4) 코드와 동일하므로 한 함수를 다른 함수의 매개 변수로 중첩 할 수 있습니다.
참조 투명성
이 프로그래밍 패턴에는 할당 문이 없다는 사실을 나타냅니다. 즉, 추가 값을 저장하려면 새 변수를 정의해야합니다. 따라서 변수의 상태는 항상 일정합니다.
이렇게하면 프로그램 실행 지점에서 모든 변수가 실제 값으로 대체 될 수 있기 때문에 원치 않는 효과가 발생할 가능성이 거의 없습니다.
재귀
함수형 프로그래밍에는 "for"및 "while"루프가 없습니다. 대신 반복은 재귀에 의존합니다. 재귀는 기본 사례에 도달 할 때까지 반복적으로 자신을 호출하는 재귀 함수를 사용하여 구현됩니다.
불변성
변수는 변경 불가능합니다. 즉, 변수가 초기화 된 후에는 수정할 수 없습니다. 새 변수를 만들 수 있지만 기존 변수를 수정할 수는 없습니다.
예
명령 적 및 선언적 접근 방식
예를 들어, 두 배열 모두에서 동일한 작업을 수행하여 이러한 접근 방식 간의 차이를 분석 할 수 있습니다. 즉, 목록에서 홀수를 필터링하고 5보다 작은 짝수를 5로 대체하는 것입니다.
동일한 계산이며 동일한 결과입니다. 그러나 보시다시피 명령형 코드는 장황하고 즉시 명확하지 않습니다. 반면에 선언적 접근 방식은 얻고 자하는 것에 초점을 맞추기 때문에 읽기 쉽고 명시 적입니다.
순수한 기능
순수하고 불순한 함수로 정의되는 것은 몇 가지 기본 예를 통해 명확히 할 수 있습니다.
일류 객체로서의 기능
데이터를 사용하는 것과 같은 방식으로 기능을 사용한다는 의미입니다. 따라서 다른 함수에 매개 변수로 전달할 수 있습니다. 다음 예제에서 int 함수는 map 함수에 매개 변수로 전달 될 수 있습니다.
>>> 목록 (map (int,))
변수에 할당하고 반환 할 수 있습니다. 예를 들어, 다음 코드에서 hello_world 함수를 할당 한 다음 변수를 함수로 실행할 수 있습니다.
이점
-달성 방법 (필수적)이 아닌 달성하고자하는 (선언적) 목표에 집중하십시오.
-할당 문이 포함되어 있지 않으므로 변수에 값이 주어지면 더 이상 변경되지 않습니다. 따라서 기능적 프로그램에는 부작용이 없습니다.
-상태가 덜 분산되고 암시 적으로 수정되지 않기 때문에 논리적 흐름이 명확합니다.
-값이 필요할 때만 평가되고 저장되는 지연 평가 개념을 지원합니다.
-순수 함수는 상태를 바꾸지 않고 입력에 전적으로 의존하기 때문에 이해하기 쉽습니다. 이러한 함수가 제공하는 반환 값은 해당 함수가 생성 한 결과와 동일합니다.
-변수 또는 외부 데이터 변경을 방지하는 순수 함수의 특성으로 인해 동시성 구현이 효과적입니다.
-함수는 값으로 처리되어 다른 함수에 매개 변수로 전달됩니다. 이것은 코드의 이해와 가독성을 향상시킵니다.
-순수 함수는 매개 변수를 한 번 사용하여 변경 불가능한 출력을 생성합니다. 변경할 수없는 값을 사용하면 디버깅 및 테스트가 더 쉬워집니다.
짧고 이해하기 쉬움
명령문보다 짧고 이해하기 쉽습니다. 연구에 따르면 코드 줄 측면에서 평균 프로그래머 생산성은 모든 프로그래밍 언어에서 거의 동일하므로 생산성이 높아집니다.
제어 흐름 없음
함수 호출은 결과 계산과 다른 효과를 가질 수 없습니다. 이로 인해 오류의 주요 원인이 배제되고 실행 순서가 무관 해집니다. 부작용이 표현식의 값을 변경할 수없고 언제든지 평가할 수 있기 때문입니다.
프로그래머는 제어 흐름을 설정하는 부담을 덜어줍니다. 표현식은 언제든지 평가할 수 있으므로 변수는 해당 값으로 대체 될 수 있습니다.
이러한 자율성은 기능적 프로그램을 기존 프로그램보다 수학적으로 관리하기 쉽게 만듭니다.
단점
-함수형 프로그래밍 패러다임은 단순하지 않아 초보자가 이해하기 어렵습니다.
-인코딩 과정에서 많은 객체가 진화하므로 유지 관리가 어렵습니다.
-경우에 따라 순수 함수를 작성하면 코드의 가독성이 저하됩니다.
-재귀와 함께 불변 값은 시스템 성능을 크게 저하시킬 수 있습니다.
-재사용은 매우 복잡하며 지속적인 리팩토링이 필요합니다.
-루프 나 루프를 사용하는 대신 재귀 적 스타일로 프로그램을 작성하는 것은 매우 어려운 작업이 될 수 있습니다.
-개체가 문제를 올바르게 나타내지 않을 수 있습니다.
-순수 함수를 작성하는 것은 간단하지만 나머지 응용 프로그램 및 입력 / 출력 작업과 결합하는 것은 매우 어렵습니다.
응용
인공 지능 프로그래밍은 함수형 프로그래밍 언어로 수행되고 인공 지능 기술은 실제 응용 프로그램으로 마이그레이션됩니다.
또한 복잡한 수학적 모델을 구현하는데도 탁월합니다. 이러한 이유로 기능적 언어의 주요 용도 중 하나는 전통적으로 학문적이었습니다. 실행 가능한 사양 및 프로토 타입 구현을 개발하는 데 유용합니다.
많은 기능 언어는 병렬 처리 구현에도 탁월합니다. 이는 실행 순서에 관계없이 항상 동일한 값을 반환하는 순수 함수를 활용할 수있는 능력 때문입니다.
기능적 방법론
WhatsApp은 함수형 프로그래밍 모델을 따르는 Erlang 프로그래밍 언어를 사용하므로 100 명 이상의 직원이 약 16 억 명의 사람들이 소유 한 데이터를 처리 할 수 있습니다.
함수형 프로그래밍 스타일의 또 다른 중요한 캐리어는 Haskell입니다. 스팸 방지 시스템에서 Facebook에서 사용합니다. 가장 널리 사용되는 프로그래밍 언어 중 하나 인 JavaScript조차도 동적 형식의 함수 언어의 속성을 과시합니다.
함수형 프로그래밍을 지원하는 언어
디
C ++ 이후에 설계되었으므로 모든 이점을 얻고 C와 호환되어야하는 약점을 제거했습니다.
얼랑
확장 성이 뛰어나고 동시 적이므로 예측할 수없는 순서로 대량의 데이터를 수신하는 통신 및 기타 애플리케이션에 이상적입니다.
Haskell
이것은 Lambda 미적분을 사용하는 순수 함수형 프로그래밍 언어입니다.
ML
수학, 과학, 재무, 분석 및 기타 응용 프로그램에 사용됩니다. 강점 중 하나는 다른 프로그램을 처리하는 소프트웨어를 만드는 것입니다.
목표 Caml
Caml을 기반으로하는 오픈 소스 언어입니다. 매우 가벼운 프로그램을 만드는 경향이 있으므로 다른 언어로 만든 프로그램보다 빠르게로드하고 실행할 수 있습니다.
계획
이것은 LISP 구문과 ALGOL 구조를 기반으로합니다. 단순성으로 인해 많은 컴퓨터 과학 과정에서 컴퓨터 프로그래밍의 기본 사항 중 일부를 보여주기 위해 프로그램 설계에 대한 소개로 사용됩니다.
참고 문헌
- 누가 이것을 호스팅하고 있습니까 (2019). 함수형 프로그래밍 배우기 :이 코딩 스타일은 당신의 마음을 날려 버릴 것입니다. 출처 : whoishostingthis.com.
- 안드레아 베르톨리 (2019). 함수형 프로그래밍에 대한 적절한 소개. 출처 : dev.to.
- 해커 지구 (2020). 함수형 프로그래밍. 출처 : hackerearth.com.
- 클로저 (2020). 함수형 프로그래밍. 출처 : clojure.org.
- 아킬 바드 왈 (2020). 함수형 프로그래밍 : 개념, 장점, 단점 및 응용 프로그램. 마구 자르기. 출처 : hackr.io.
- Guru99 (2020). 함수형 프로그래밍이란 무엇입니까? 예제가있는 튜토리얼. 출처 : guru99.com.