OO 프로그래밍 문서는 디자인 패턴으로 가득합니다. 객체 지향 프로그래밍에 관한 대부분의 책은 팩토리 및 데코레이터와 같은 패턴을 디자인하기 위해 하나 또는 두 개의 장을 제공합니다. 따라서 기능적 언어에서 동등한 패턴은 무엇이며 아직 아무도 그것에 대해 책을 쓰지 않은 이유는 무엇입니까? 디자인 패턴이 필요없는 기능적 언어에 특별한 것이 있습니까?
OO 프로그래밍 문서는 디자인 패턴으로 가득합니다. 객체 지향 프로그래밍에 관한 대부분의 책은 팩토리 및 데코레이터와 같은 패턴을 디자인하기 위해 하나 또는 두 개의 장을 제공합니다. 따라서 기능적 언어에서 동등한 패턴은 무엇이며 아직 아무도 그것에 대해 책을 쓰지 않은 이유는 무엇입니까? 디자인 패턴이 필요없는 기능적 언어에 특별한 것이 있습니까?
답변:
OO와 함수형 프로그래밍은 매우 다른 두 가지 프로그래밍 패러다임이며 DP (디자인 패턴)는 OO 설계 및 프로그래밍의 중요한 부분입니다. DP는 기능적 프로그래밍에서 그러한 역할을하지 않습니다.
DP는 함수형 프로그래밍에 필요하지 않다고 말할 수도 있습니다. DP가 치료할 가려움증은 없습니다.
디자인 패턴은 프로그래밍 언어에서 누락 된 기능 의 표시라고 주장 할 수 있습니다.
피터 노르 빅은 발견 에서 23 개 패턴 중 16 것을 디자인 패턴 책 "입니다 중 하나 보이지 않거나 간단한 리스프 또는 딜런의 연구".
"많은 패턴은 객체 지향 또는 더 일반적으로 변경 가능한 상태를 의미하므로, 데이터가 불변이거나 그렇게 취급되는 기능적 프로그래밍 언어에는 적용되지 않을 수 있습니다." -http : //en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
Jeremy Gibbons 가 책을 쓰고 있습니다. 완료 될 때까지 그의 블로그 인 Patterns in Functional Programming을 읽을 수 있습니다 . 그는 가장 오래된 게시물부터 최신 게시물까지 읽는 것이 좋습니다.
그의 출판물 도 찾아보십시오 . 그는 더 높은 순서의 데이터 유형-일반 프로그램으로 디자인 패턴에서 4 개 패턴의 갱을 다루고 종이 접기 프로그래밍 (폴드 및 펼침) 에서 재귀 방정식으로 프로그래밍 패턴을 설명합니다 .
간단한 사실은 많은 OO 패턴이 기능적 언어 (특히 원본 GoF 패턴)의 숙어로 간주된다는 것입니다. 예를 들어 반복자 패턴 (지금 C #과 같은 언어에 내장)은 시퀀스 연산자가있는 Lisp 또는 ML에서는 필요하지 않습니다.
우리가 OO 시스템에서 사용하는 많은 패턴은 코딩 객체에 집중할 수 있도록 "필수적이지 않은"요소를 없애는 데 도움이됩니다. 즉, 패턴은 응용 프로그램의 비 관심 부분에 대한 솔루션입니다. 비즈니스 가치를 높이는 데 집중할 수 있도록 이전에 해결 된 일반적인 요구 사항 (예 : 데이터베이스 전송 또는 단위 테스트 향상을위한 xUnit 패턴 등을 처리하기위한 Enterprise Application Architecture의 Fowlers 패턴)의 패턴과 같은 패턴을 활용해야합니다. 신청을 위해.
GoF 패턴의 특성 외에도 기능 프로그래밍에도 적용 할 수있는 디자인 패턴이 있다고 확신합니다. 문제는 OO가 지배적 인 패러다임이라는 것입니다. 기능 개발자를 대상으로하는 패턴 북을 작성하는 것은 ... 솔직히 출판사로부터 청신호를 얻지 못할 것입니다. 그것이 비등하는 것입니다. 기능적 패턴을위한 충분한 시장이 충분하지 않아서 주제에 관한 많은 책을 보유 할 수 없습니다.
스튜어트 시에라 (Stuart Sierra)의이 주제에 대한 좋은 대화 (~ 45 분) :
http://www.infoq.com/presentations/Clojure-Design-Patterns
반드시 구속력이 있고 권위가있는 것은 아니지만 데이터 분석을 위해 FP를 사용한 경험에서 그의 많은 사례를 인정했습니다.
Clojure로 작성되었지만 모든 FP 언어에 적용되는 예제입니다. 그가 다루는 패턴의 이름은 다음과 같습니다.
디자인 패턴을 배우는 데 정말로 관심이 있다면 Haskell보다 더 이상 보지 마십시오. 언어 를 배우기 위해 시간을 내면 어려운 방식으로 들어가서 대부분의 기본 패턴에 익숙해집니다. 언어로 구워집니다.
모나드를 건너 뛰지 마십시오. 거기에는 많은 설명이 있으며 아이디어를 받아들이려면 약간의 노력이 필요하지만 계속 연결하면 결국 당신에게 새벽이되어 얼마나 많은 디자인 패턴이 가능한지 놀라게 될 것입니다 이 하나의 추상화 / 인터페이스 위에 구축하십시오.
하스켈을 움켜 쥐면 FP 무기고를 충분히 사용할 수 있습니다. 요점은, 그것을 유지하는 당신이 그것을 얻을 때까지. 바로 가기가 없습니다.
FP의 디자인 방법론이 문제 공간을 정확하게 반영하도록 유형을 디자인하고 구현이 자동으로 따라야하는 한, 디자인 패턴에 대한 책과 동등한 FP는 Chris Okasaki의 순전히 기능적인 데이터 구조와 같습니다 .