나는 이것이 언어에 달려 있다고 생각합니다. 함수형 프로그래밍에 관해서는, 나는 주로 Haskell을 다루었습니다. 그래서 나는 그것이 어떻게 작동하는지 설명 할 것입니다.
Haskell 코드는 기본적으로 함수와 데이터 유형의 모음 인 "모듈"로 구성됩니다. 각 모듈은 단일 파일입니다. 모듈은 Java 클래스와 Java 패키지를 혼합 한 것으로 모듈이 수행하는 작업의 정확한 범위가 다릅니다. 또한 모듈은 내보낼 함수 및 형식 생성자와 숨길 함수를 제어합니다. 이것은 Java private
와 비슷합니다 public
.
내 프로그램에서 나는 모듈이 의미 적으로 한 가지 일 을하는 것을 좋아한다 . 이것은 여러 데이터 유형을 정의 할 수 있다는 점을 제외하고는 Java 클래스처럼 만듭니다. 와 같은 표준 라이브러리에서 사용하는 모듈 Data.List
은 패키지와 비슷합니다. 유사한 유틸리티 기능을 제공합니다. 이것도 같은 정적 Java 클래스와 매우 유사합니다 java.util.Arrays
.
모듈은 명확성을 위해 중첩 될 수 있다는 점에서 Java 패키지와 비슷합니다 (코드 자체에 영향을 미치지 않는다고 생각합니다). 일반적으로 단일 프로젝트의 경우 이름 (예 :)을 지정 Project
하고 모든 모듈을 여기에 포함시킵니다 (예 : Project.Parse
및 Project.Run
). 응용 프로그램보다 라이브러리와 유사한 코드를 작성하는 경우 Data.List
또는 수행중인 작업을 기반으로 코드를 구성합니다.Control.Monad
. 다른 언어와의 한 가지 주요 차이점은 Haskell이 IO를 제한하고 한곳에 모두 넣도록 권장한다는 것입니다. 많은 수의 모듈이 IO를 전혀 사용하지 않으며 주어진 프로젝트에 대해 가능한 많은 모듈을 순수하게 사용하고 싶습니다.
예를 들어, 나는 TPL이라고 부르는 간단한 프로그래밍 언어를 사용하고 있습니다. 이를 위해 TPL.Parse
언어의 내부 표현과 구문 분석 방법을 정의 TPL.Run
하고 인터프리터를 실행하고 변수와 IO를 처리 하는 두 가지 간단한 모듈을 만들었습니다 . 실제로 코드를 컴파일하고 실행하기 위해서는 일반적으로 Main
프로그램의 시작점이되는 모듈이 있습니다.
파일 내에서 기능을 구성하는 데 상당한 자유가 있습니다. 이것은 내가 좋아하는 것입니다. 다른 곳에서 사용하기 전에 데이터 유형을 맨 위쪽으로 정의합니다. 데이터 유형을 정의한 직후, 적절한 유형 클래스의 일부로 만드는 데 필요한 모든 것을 구현합니다. 이것은 인터페이스를 구현하는 것과 같습니다. 그런 다음 논리와 다양한 도우미 기능을 적절하게 따릅니다. 마지막으로 모든 IO 기능을 맨 아래로 끝내고 싶습니다 main
. 이를 통해 IO가 수행하는 작업과 프로그램이 시작되는 위치를 정확하게 알 수 있습니다.
요약하자면, 기능은 모듈에 포함되어 있으며 각 기능은 단일 파일로 구성됩니다. 여러 모듈이 프로그램이나 라이브러리를 구성 할 수 있습니다. 전자는 일반적으로 Main
진입 점 인 모듈을 포함합니다 . 파일에는 구성에 대한 여러 가지 옵션이 있지만 데이터 유형을 맨 위, 맨 아래 IO 및 중간 논리를 그룹화하는 것을 선호합니다.
What's stopping you from...
하스켈 코드가 정신적으로 계산하지 않는 시점까지 완전히 다른 사고 방식을 가진 수년간의 프로그래밍. 물론 당신이 진짜 프로젝트가 항상 정확하고 깔끔하게 정리되어 있다고 가정합니다 (아마도 그들이하지만 어떻게 나 같은 놈 알고 있어요?)