함수형 프로그래밍은 선언적 패러다임입니다. FP의 장점 중 하나는 부작용을 피할 수 있다는 것입니다. 일부 문제의 경우 FP가 적합하지 않다고합니다.
기능 프로그래밍이 적합하지 않은 일반적인 문제는 무엇입니까?
함수형 프로그래밍은 선언적 패러다임입니다. FP의 장점 중 하나는 부작용을 피할 수 있다는 것입니다. 일부 문제의 경우 FP가 적합하지 않다고합니다.
기능 프로그래밍이 적합하지 않은 일반적인 문제는 무엇입니까?
답변:
본질적으로 매우 상태가 좋은 응용 프로그램. 비디오 게임은 실제 세계를 모델링하기 때문에 좋은 예입니다. 무언가가 바뀔 때마다 이전 상태에서 다시 작성하는 대신 세계 상태를 수정하는 것에 대해 생각하는 것이 훨씬 더 합리적입니다.
구체적인 예는 몬스터가 총에 맞은 후 체력을 바꾸는 것입니다. 체력이 적은 것을 제외하고는 모든면에서 똑같은 완전히 새로운 괴물로 대체하는 것보다 단순히 체력을 바꾸는 것이 훨씬 합리적입니다. 이러한 종류의 변화는 게임 세계의 모든 것을 구성하며 순수한 기능 방식으로 수행하는 것은 그리 직관적이지 않습니다. 최소한 순전히 기능적인 언어로 수행하는 경우 상당한 성능 저하가있을 수 있습니다.
참고로 게임의 일부 문제는 AI와 같은 기능적 프로그래밍에 매우 적합합니다. 하이브리드 기능 / 제 국어는 이러한 경우에 매우 적합합니다.
실시간 임베디드 프로그래밍은 부작용에 관한 것입니다. 디지털 및 아날로그 IO, 타이머, 직렬 및 병렬 포트와 상호 작용하여 흥미로운 모든 기능은 부작용이있는 함수를 호출하여 수행됩니다.
GUI 프로그래밍은 기능적 프로그래밍에 적합하지 않다고 주장합니다. GUI는 일반적으로 매우 상태가 양호하며 부작용없이 상태를 사용하여 모델링 / 관리하는 것이 훨씬 쉽습니다. GUI를위한 기능적 프로그래밍 언어를 사용하는 것이 가능 하지만, 아마도 좋은 생각은 아닙니다.
다른 답변에서 언급 한 바와 같이, 게임 상태를 추적하여 관리하는 것이 종종 쉽게, 당신은 동안 수 기능적인 언어로 게임을 쓰기는 (은 "상태"언어로 그렇게하는 것이 더 쉽고 효율적 즉, 객체 지향 언어).
데이터 중심 비즈니스 애플리케이션. 사용자 인터페이스와 간단한 데이터 작업에는 FP가 필요하지 않습니다.
filter
, reduce
하고 map
. 일부 던져 sort
, partition
, groupBy
. 결국, 이러한 응용 프로그램을 작성하기위한 가장 널리 사용되는 프로그래밍 언어는 엑셀,이다 인 기능적인 언어입니다.
함수형 프로그래밍 자체에 적합하지 않은 문제는 쉽게 무시할 수 없습니다.
함수형 프로그래밍에 사용되는 실제 언어와 기능에 따라 달라집니다.
실시간 임베디드 시스템에 대해 이미 언급 한 Erlang이 그 예입니다.
State-fullness는 또한 함수형 프로그래밍에 대한 좋은 기준이 아니며,이를 처리하기 위해 함수형 프로그래밍 언어로 구현 된 몇 가지 성공적인 방법이 있습니다.
기능 프로그래밍에 대한 부작용도 종종 언급됩니다. 완전히 독단적이지 않은 모든 프로그램에는 부작용이 있습니다. 따라서 모든 실제 FP 언어는이 문제를 처리 할 수있는 방법이 있습니다. 이는 세계 부작용을 얼마나 우아하게 캡슐화 하는가에 달려 있습니다.
전역 변수와 같은 임의의 부작용이 전혀 필요하지 않습니다.
그러나 문제를 보는 익숙한 방식을 왜곡하지 않기 때문에 함수형 프로그래밍에 더 쉽게 접근 할 수있는 문제 세트가 있습니다. 그러나 일단 기능적으로 생각하면 더 많은 문제 세트가 부작용이 적습니다.
C를 프로그래밍 할 때조차도 전역 변수와 같은 임의의 부작용을 가능한 한 줄이는 것이 좋습니다.