함수형 프로그래밍에 대한 SOLID 원칙과 동일


35

객체 지향 설계에 대해 생각할 때 SOLID 원칙이 매우 유용하다는 것을 알았습니다 .

기능적 프로그래밍을 위해 맞춤화 된 유사 / 동등한 언어 불가지론 세트가 있습니까?


12
FWIW,이에 간략하게 논의되었다 SO를 년 전
StuartLC


슬라이드 와이 비디오 는 함수형 프로그래밍에 적용된 SOLID 원리를 보여줍니다. 둘 다 Clojure 언어를 예로 사용하지만 원칙은 다른 언어로 유지됩니다.
mascip


답변:


14

동등한 것을 찾기는 약간 어렵지만 시도해 볼 수 있습니다.

  • FP의 S (SRP) 함수는 참조 투명성이라고하는 동일한 인수에 대해 항상 동일한 출력을 생성합니다.
  • O (OCP)에서 FP 대수 데이터 유형이라는 개념은이 클래스 계층 구조에 어떻게 관련되는지 모양과 어떤 문제가 모두 해결하려고,이 일을
  • L (LSP) Liskov 대체 원리는 공분산 2입니다.
  • D 일반 기능 프로그래밍 (DIP)는 "의존성 삽입"에 대한, 또한 (예를 들어, 모노 이드 또는 펑 용) 분류 이론의 도움으로 다른기구가있는 함수의 합성을 통해 달성 추상화 3

21
저는 아직도 단일 책임 원칙 에서 참조 투명성 에 어떻게 도달했는지에 대해 생각하고 있습니다. 이 두 가지는 관련이 없습니다. SRP는 단일 목적을 가진 기능에 관한 것입니다. 이와 관련하여 참조 적으로 투명하거나 투명하지 않을 수 있습니다.
Goran Jovic

3
아, 나빠-이제 알겠다 이들은 동일하거나 유사한 것을 의미하는 것이 아니라 원칙이되고 동일한 약어를 형성한다는 의미에서 동등합니다. 공감에 대해 죄송합니다!
Goran Jovic

1
맞습니다. 그것을 읽는 의도 된 방법입니다. fp와 관련하여 해당 용어에 대한 매핑을 설명하려고했습니다.
AndreasScheinert

나는 당신이 코멘트를 편집 할 수 없다는 것을 싫어합니다. 사실, 적어도 비슷한 것을 의미해야합니다.
AndreasScheinert

고차 함수는 일종의 의존성 주입을 제공 할 수 있습니다. 구체적인 함수를 매개 변수로 일반 (고차) 함수에 삽입합니다.
Giorgio

44

SOLID는 기능 / 제국 영역에도 좋은 아이디어로 판명되었습니다.

SRP- '한 가지 일만'은 처음부터 명령형 프로그래밍에서 가져 왔습니다. 작고 집중된 기능을 갖는 것이 좋습니다.

OCP- 코드를 수정하지 않고 동작을 변경할 수 있습니다. 함수형 프로그래밍은 상속보다 더 높은 차수의 함수를 사용하지만 그 원칙이 유지됩니다.

LSP는 - 약간의 인터페이스 규약을 준수하는 것은 단지 함수형 프로그래밍에서 좋은 같은 객체 지향 같이한다. 정렬 함수가 비교자를 사용하면 '0은 같고 부정적인 결과를 제공하는 것보다 작고 긍정적 인 결과보다 큽니다'동작을 예상합니다.

ISP- 대부분의 기능적 언어에는 여전히 구조가 있습니다. 함수에 필요한 가장 작은 데이터 집합을 지정하는 것은 여전히 ​​좋은 방법입니다. 데이터에 대한 최소한의 특정 인터페이스를 요구하는 것은 (T의 열거가 작동 할 때 왜 List of int를 사용합니까?) 여전히 좋은 습관입니다.

DIP- 함수를 하드 코딩하는 대신 매개 변수를 함수 (또는 검색하는 상위 차수 함수)에 지정하면 값을 얻기 위해 함수 지향 프로그래밍 에서처럼 객체 지향적입니다.

그리고 객체 지향 프로그래밍을 수행 할 때도 이러한 원칙 중 상당수는 객체의 메소드 디자인에도 적용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.