[functional-programming] 함수형 프로그래밍의 이점은 무엇입니까? [닫은]

함수형 프로그래밍의 이점이 무엇이라고 생각하십니까? 그리고 그들은 오늘날 프로그래머에게 어떻게 적용됩니까?

함수형 프로그래밍과 OOP의 가장 큰 차이점은 무엇입니까?



답변

함수형 프로그래밍의 스타일은 원하는 것을 얻는 방법이 아니라 원하는 것을 설명하는 것입니다. 즉 : 반복기 변수를 사용하여 for 루프를 만들고 각 셀에 대해 무언가를 수행하는 배열을 행진하는 대신 “이 레이블은이 함수가 모든 시스템에서 수행 된이 배열의 버전을 나타냅니다. 집단.”

함수형 프로그래밍은보다 기본적인 프로그래밍 아이디어, 목록 이해 및 캐싱과 같은 아이디어를 컴파일러로 이동합니다.

함수형 프로그래밍의 가장 큰 이점은 코드가 더 간결 할 수 있기 때문에 간결함입니다. 함수형 프로그램은 루프의 중심이되는 반복기 변수를 생성하지 않으므로 이러한 종류의 오버 헤드가 코드에서 제거됩니다.

또 다른 주요 이점은 동시성인데, 이는 컴파일러가 상태 변수 (루프의 반복기처럼)를 수동으로 설정해야하는 대부분의 작업을 처리하기 때문에 함수형 프로그래밍으로 더 쉽게 수행 할 수 있습니다.

대부분의 기능적 언어와 확장은 지연 평가를 지원하기 때문에 프로그램 작성 방식에 따라 단일 프로세서의 컨텍스트에서도 일부 성능 이점을 볼 수 있습니다. Haskell에서 “이 레이블은 모든 짝수를 포함하는 배열을 나타냅니다”라고 말할 수 있습니다. 이러한 배열은 무한히 크지 만 배열 초기화시 필요한 가장 큰 값이 무엇인지 알 필요없이 언제든지 해당 배열의 100,000 번째 요소를 요청할 수 있습니다. 값은 필요할 때만 계산되며 더 이상 계산되지 않습니다.


답변

가장 큰 장점은 익숙하지 않다는 것입니다. Scheme과 같은 언어를 선택하고 문제를 해결하는 방법을 배우면 이미 알고있는 언어로 더 나은 프로그래머가 될 것입니다. 제 2의 인간 언어를 배우는 것과 같습니다. 당신은 비교할 것이 없기 때문에 다른 것들은 기본적으로 당신 자신의 변형이라고 가정합니다. 이미 알고있는 것과 관련이없는 다른 사람에게 노출되는 것은 유익합니다.


답변

함수형 프로그래밍이 중요한 이유
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

요약

소프트웨어가 점점 더 복잡 해짐에 따라이를 잘 구성하는 것이 점점 더 중요 해지고 있습니다. 잘 구조화 된 소프트웨어는 작성 및 디버그가 쉽고 향후 프로그래밍 비용을 줄이기 위해 재사용 할 수있는 모듈 모음을 제공합니다.

이 논문에서 우리는 함수 언어의 두 가지 기능, 특히 고차 함수와 지연 평가가 모듈화에 크게 기여할 수 있음을 보여줍니다. 예를 들어 목록과 트리를 조작하고, 여러 수치 알고리즘을 프로그래밍하고, 알파-베타 휴리스틱 (게임 플레이 프로그램에 사용되는 인공 지능의 알고리즘)을 구현합니다. 모듈화가 성공적인 프로그래밍의 핵심이기 때문에 함수형 프로그래밍은 소프트웨어 개발에 중요한 이점을 제공한다고 결론지었습니다.


답변

그러므로 좋은 출발점은 명령형 언어에서는 불가능하지만 기능적 언어에서는 가능한 몇 가지를 이해하는 것입니다.

계산 가능성에 대해 이야기하고 있다면 물론 기능적 프로그래밍에서는 불가능하지만 명령형 프로그래밍은 불가능합니다 (또는 그 반대).

다른 프로그래밍 패러다임의 요점은 이전에는 불가능했던 일을 가능하게하는 것이 아니라 이전에는 어려웠던 일을 쉽게 만드는 것입니다.

함수형 프로그래밍은 간결하고 버그가없고 병렬화 가능한 프로그램을보다 쉽게 ​​작성할 수 있도록하는 것을 목표로합니다.


답변

둘 중 하나 일 필요는 없습니다. C # 3.0과 같은 언어를 사용하면 각각의 최상의 요소를 혼합 할 수 있습니다. OO는 클래스 수준 이상의 대규모 구조에 사용할 수 있으며, 메서드 수준의 소규모 구조에는 기능적 스타일을 사용할 수 있습니다.

Functional 스타일을 사용하면 제어 흐름 문 등과 혼동하지 않고 의도를 명확하게 선언하는 코드를 작성할 수 있습니다. 부작용없는 프로그래밍과 같은 원칙 때문에 코드에 대해 추론하고 정확성을 확인하는 것이 훨씬 쉽습니다. .


답변

함수형 프로그래밍이 필요한 가장 실용적인 예는 동시성이라고 생각합니다. 함수형 프로그램은 자연스럽게 스레드로부터 안전하며 멀티 코어 하드웨어의 부상을 감안할 때 이것이 가장 중요합니다.

함수형 프로그래밍은 모듈성을 증가시킵니다. 너무 긴 명령형 메서드 / 함수를 자주 볼 수 있습니다. 두 줄 이상의 함수는 거의 볼 수 없습니다. 그리고 모든 것이 분리되어 있기 때문에 재사용 성이 훨씬 향상되고 단위 테스트가 매우 쉽습니다.


답변

프로그램이 커지면 어휘의 명령 수가 너무 많아 사용하기가 매우 어려워집니다. 객체 지향 프로그래밍은 더 나은 방식으로 명령을 구성 할 수 있기 때문에 우리의 삶을 더 쉽게 만듭니다. 고객과 관련된 모든 명령을 일부 고객 엔터티 (클래스)와 연결할 수 있으므로 설명이 훨씬 더 명확 해집니다. 그러나 프로그램은 여전히 ​​진행 방법을 지정하는 일련의 명령입니다.

함수형 프로그래밍은 어휘를 확장하는 완전히 다른 방법을 제공합니다. 새로운 기본 명령 추가에만 국한되지 않습니다. 또한 프로그램을 생성하기 위해 명령을 조합하는 방법을 지정하는 새로운 제어 구조를 추가 할 수 있습니다. 명령형 언어에서 우리는 순서대로 또는 루프와 같은 제한된 수의 내장 구조를 사용하여 명령을 작성할 수 있었지만 일반적인 프로그램을 살펴보면 여전히 많은 반복 구조를 볼 수 있습니다. 명령을 결합하는 일반적인 방법