모든 기능적 프로그래밍 디자인 패턴은 어디에 있습니까? [닫은]


75

OO 프로그래밍 문서는 디자인 패턴으로 가득합니다. 객체 지향 프로그래밍에 관한 대부분의 책은 팩토리 및 데코레이터와 같은 패턴을 디자인하기 위해 하나 또는 두 개의 장을 제공합니다. 따라서 기능적 언어에서 동등한 패턴은 무엇이며 아직 아무도 그것에 대해 책을 쓰지 않은 이유는 무엇입니까? 디자인 패턴이 필요없는 기능적 언어에 특별한 것이 있습니까?


6
기능적인 디자인 패턴이 있습니다. 예를 들어 메모 나 모나드를 예로
들겠

2
FinnNk Monad는 디자인 패턴보다 유형 클래스에 가깝습니다 ^ _ ^
대안

haskell의 경우 Gabriel Gonzalez에는 블로그 게시물이 있습니다 (예 : haskellforall.com/2012/08/the-category-design-pattern.html
bennofs


1
맵 축소는 하나입니다. 나는 패턴의 좋은 목록이없는 실망
스리 Sarnobat

답변:


47

OO와 함수형 프로그래밍은 매우 다른 두 가지 프로그래밍 패러다임이며 DP (디자인 패턴)는 OO 설계 및 프로그래밍의 중요한 부분입니다. DP는 기능적 프로그래밍에서 그러한 역할을하지 않습니다.

DP는 함수형 프로그래밍에 필요하지 않다고 말할 수도 있습니다. DP가 치료할 가려움증은 없습니다.


41
디자인 패턴이 FP에 적용되지 않는다는 데 동의하지 않습니다. FP는 여전히 일반적인 방식으로 해결되는 일반적인 문제를 제시합니다. OO에서 해결 된 문제와는 다른 문제가 있지만 여전히 문제가 있습니다. FP는 현재 상업 세계에서 덜 일반적이기 때문에 아마도 OO보다 훨씬 덜 관심을 얻은 것으로 생각됩니다.
d11wtq

22
함수형 프로그래밍에는 디자인 패턴이 없다고 주장하는 것은 잘못된 정보입니다. 가장 쉬운 반례는 모나드입니다. 함수형 프로그래밍에 모나드를 사용할 필요는 없지만 순수한 함수형 프로그래밍의 적용을 용이하게하기 위해 사람들이 따르는 매우 일반적인 패턴입니다. 본질적으로 디자인 패턴의 정의입니다.
voidvector

3
디자인 패턴은 프로그래밍 또는 하우스 디자인 등 모든 디자인 활동에 적용됩니다. 실제로 패턴 언어의 개념은 아키텍처 ( en.wikipedia.org/wiki/A_Pattern_Language) 에서 비롯됩니다 .
BobDalgleish

2
흠. 관찰 가능한 스트림, 철도 검증 및 지옥, 거의 모든 모나드는 디자인 패턴입니다.
Chet

2
@voidvector Monads는 단순한 디자인 패턴이 아닙니다. FP에서 모나드는 유형 시스템 간의 펑터로 사용되며 개념 자체는 수학의 한 가지 범주 인 범주 이론에서 나옵니다. 그것들은 일반적으로 대수적 구조들 사이의 특정한 종류의 관계를 설명하는데 사용됩니다. 함수형 프로그래밍은 프로그래밍에서 수학을 쉽게 사용할 수있는 디자인 패턴이라고 말하는 것이 더 정확합니다.
John Cramerus

67

Jeremy Gibbons 가 책을 쓰고 있습니다. 완료 될 때까지 그의 블로그 인 Patterns in Functional Programming을 읽을 수 있습니다 . 그는 가장 오래된 게시물부터 최신 게시물까지 읽는 것이 좋습니다.

그의 출판물 도 찾아보십시오 . 그는 더 높은 순서의 데이터 유형-일반 프로그램으로 디자인 패턴에서 4 개 패턴의 갱을 다루고 종이 접기 프로그래밍 (폴드 및 펼침) 에서 재귀 방정식으로 프로그래밍 패턴을 설명합니다 .


13

간단한 사실은 많은 OO 패턴이 기능적 언어 (특히 원본 GoF 패턴)의 숙어로 간주된다는 것입니다. 예를 들어 반복자 패턴 (지금 C #과 같은 언어에 내장)은 시퀀스 연산자가있는 Lisp 또는 ML에서는 필요하지 않습니다.

우리가 OO 시스템에서 사용하는 많은 패턴은 코딩 객체에 집중할 수 있도록 "필수적이지 않은"요소를 없애는 데 도움이됩니다. 즉, 패턴은 응용 프로그램의 비 관심 부분에 대한 솔루션입니다. 비즈니스 가치를 높이는 데 집중할 수 있도록 이전에 해결 된 일반적인 요구 사항 (예 : 데이터베이스 전송 또는 단위 테스트 향상을위한 xUnit 패턴 등을 처리하기위한 Enterprise Application Architecture의 Fowlers 패턴)의 패턴과 같은 패턴을 활용해야합니다. 신청을 위해.

GoF 패턴의 특성 외에도 기능 프로그래밍에도 적용 할 수있는 디자인 패턴이 있다고 확신합니다. 문제는 OO가 지배적 인 패러다임이라는 것입니다. 기능 개발자를 대상으로하는 패턴 북을 작성하는 것은 ... 솔직히 출판사로부터 청신호를 얻지 못할 것입니다. 그것이 비등하는 것입니다. 기능적 패턴을위한 충분한 시장이 충분하지 않아서 주제에 관한 많은 책을 보유 할 수 없습니다.


9

스튜어트 시에라 (Stuart Sierra)의이 주제에 대한 좋은 대화 (~ 45 분) :

http://www.infoq.com/presentations/Clojure-Design-Patterns

반드시 구속력이 있고 권위가있는 것은 아니지만 데이터 분석을 위해 FP를 사용한 경험에서 그의 많은 사례를 인정했습니다.

Clojure로 작성되었지만 모든 FP 언어에 적용되는 예제입니다. 그가 다루는 패턴의 이름은 다음과 같습니다.

  • 주 / 이벤트
  • 결과
  • 누산기
  • 축소 / 결합
  • 재귀 확장
  • 관로
  • 싸개
  • 토큰
  • 관찰자
  • 전략

6

디자인 패턴을 배우는 데 정말로 관심이 있다면 Haskell보다 더 이상 보지 마십시오. 언어배우기 위해 시간을 내면 어려운 방식으로 들어가서 대부분의 기본 패턴에 익숙해집니다. 언어로 구워집니다.

모나드를 건너 뛰지 마십시오. 거기에는 많은 설명이 있으며 아이디어를 받아들이려면 약간의 노력이 필요하지만 계속 연결하면 결국 당신에게 새벽이되어 얼마나 많은 디자인 패턴이 가능한지 놀라게 될 것입니다 이 하나의 추상화 / 인터페이스 위에 구축하십시오.

하스켈을 움켜 쥐면 FP 무기고를 충분히 사용할 수 있습니다. 요점은, 그것을 유지하는 당신이 그것을 얻을 때까지. 바로 가기가 없습니다.


-3

FP의 디자인 방법론이 문제 공간을 정확하게 반영하도록 유형을 디자인하고 구현이 자동으로 따라야하는 한, 디자인 패턴에 대한 책과 동등한 FP는 Chris Okasaki의 순전히 기능적인 데이터 구조와 같습니다 .


1
오카 사키의 책은 일반적으로 변경 가능한 데이터 구조 만 고려하는 수많은 데이터 구조 및 알고리즘 책의 데이터 구조 부분과 동일합니다.
AProgrammer

1
패턴을 디자인하기 위해 데이터 구조를 동일시하는 것은 계산서에 맞지 않는다고 생각합니다. OO 프로그래머가 적절한 클래스 정의가 나타날 때까지 팔을 찢어 버리는 것과는 다릅니다.
davidk01

그렇습니다. 오카 사키의 책은 디자인 패턴보다 낮은 수준입니다.
FinnNk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.