문제

우리는 객체 지향 프로그래밍의 패턴에 대한 매우 멋진 GOF 책 (디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소) 과이 주제에 대한 웹의 많은 기사와 리소스를 가지고 있습니다.

기능 프로그래밍을위한 패턴 (모범 사례)에 대한 책 (기사, 자원)이 있습니까?

Python 및 Ruby와 같은 언어로 된 동적 프로그래밍을 위해?

AOP를 위해?

도움이 되었습니까?

해결책

관련 질문은 전에 다음과 같습니다. "기능적 프로그래밍이 GOF 설계 패턴을 대체합니다", 큰 반응으로.

"디자인 패턴"과 동등한 것은 FP에서 매우 모호합니다. 일반적으로 코드에서 "패턴"을 볼 때마다 모든 용도를 균일 한 방식으로 다루기 위해 무언가를 만들어야합니다. 종종 더 높은 차수 기능이 될 것입니다.

예를 들어 다음 C 코드입니다

for (int i = 0; i < n; i++)
  if (a[i] == 42)
    return true;
return false;

기본 "디자인 패턴"을 생각할 수 있습니다. 목록에 특별한 요소가 있는지 확인하십시오. 이 스 니펫은 조건이 다른 코드로 여러 번 나타날 수 있습니다. FP에서는 단순히 고차 기능을 여러 번 사용합니다. 더 이상 "패턴"이 아닙니다.

기능 프로그래밍에는 고유 한 관행이 있지만 OOP의 "디자인 패턴"과는 크게 다릅니다. 여기에는 다형성, 목록, 고차 기능, 불변성/순도, 게으름의 사용이 포함됩니다 [모두 FP에 필수적이거나 구체적이지는 않습니다] ... 또한 참조하십시오. "FP의 핵심 개념은 무엇입니까?". 또한, 유형 클래스 (Haskell), 모듈 및 기능 (OCAML), 연속, 모나드, 지퍼, 손가락 나무, 모노이드, 화살표, 적용 기능, 모나드 변압기, 많은 순전히 기능적인 데이터 구조 () 등. 기능성 진주, 랜달 슐츠 (Randall Schulz)가 이미 언급 한 것은 FP의 매우 풍부한 자원을 최대한 활용합니다.

관용 코드를 작성하는 방법을 배우려면 기능 프로그래밍 언어의 책/자원이 IMHO로 충분합니다 (예 : RWH 그리고 리아); 사고의 차이점은 필수적으로 그리고 기능적으로 항상 설명됩니다.

역동적 인 언어에서 Jeff Foster의 링크는 좋은 컬렉션입니다. 여기 "디자인 패턴"으로 간주 될 수있는 JavaScript에서 Memoization을 매우 영리하게 사용합니다.

다른 팁

GOF에 설명 된 디자인 패턴 목록은 C ++ 및 Java와 같은 언어로 작성되었습니다. 때로는 융통성없는 언어를보다 역동적으로 만들기 위해 해결 방법 목록으로 간주됩니다. 예를 들어 Ruby에서는 방문자 패턴이 실제로 필요하지 않습니다. 런타임에 멤버 기능 추가를 클래스로 변경할 수 있기 때문입니다. 믹스 인을 사용할 수 있다면 데코레이터 패턴은 더 이상 사용되지 않습니다.

C ++에서 솔루션을 구현할 때 스캐 폴딩 코드를 작성하는 데 대부분의 시간을 보내는 경향이 있습니다. 응용 프로그램의 프로그램 도메인에서 생각할 수있는 플랫폼을 만드는 것으로 시작합니다. 디자인 패턴은 아마도 다양한 종류의 스캐 폴딩을 분류하는 방법으로 개발되었을 것입니다.

루비에서 프로그래밍 할 때 지원 코드가 많지 않다고 언급해야합니다. 필요하지 않은 것 같습니다.

내 이론은 다른 언어는 기본 언어 구성이 충분하기 때문에 디자인 패턴의 개념을 강조하지 않는다는 것입니다. Java 및 C ++의 방어에서 : 아마도 기능적 및 AOP 언어가 종종보다 구체적인 문제 영역이나 틈새 시장에서 사용되기 때문에 Java와 C ++는 모든 것에 사용되기 때문일 수 있습니다.

그리고 이제 다른 것을 위해. OO 디자인으로 조금 지루하고 새로운 것을 배우고 싶다면 책에 관심이있을 수 있습니다. 프로그래밍 요소 작성자가 작성했습니다 Stepanov. 이 책에서 그는 수학적 관점에서 프로그래밍에 어떻게 접근 할 수 있는지 설명합니다. 미리보기를 보려면 그의 것을 확인하십시오 클래스 노트 Adobe (다른 것 중에서도 발견됩니다 이 페이지). Adobe 's에도 관심이있을 수 있습니다 수집 된 서류.

다음은 다음과 같습니다 동적 프로그래밍의 디자인 패턴

기능적 진주 (중 하나)는 기능적 프로그래밍을위한 설계 패턴의 표준 세트가 아닌가?

이있다 루비에서 패튼을 디자인하십시오.

GOF에 언급 된 디자인 패턴 외에도 다른 패턴도 나와 있습니다. 구성에 대한 협약 .

개인적으로 동적 언어에 대한 가장 중요한 패턴 - 작성 테스트. 정적으로 유형 된 언어보다 훨씬 중요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top