다른 많은 답변은 함수 프로그래밍의 성능 (병렬) 측면에 중점을 두 었으며, 이것이 매우 중요하다고 생각합니다. 그러나 생산성과 관련하여 구체적으로 요구 한 것은 명령형 패러다임보다 기능적 패러다임에서 동일한 것을 더 빠르게 프로그래밍 할 수 있습니다.
실제로 F #의 프로그래밍이 내가 생각하는 방식과 일치한다는 것이 개인적 경험에서 알기 때문에 더 쉽습니다. 그것이 가장 큰 차이점이라고 생각합니다. F #과 C #으로 모두 프로그래밍했으며 F #에는 "언어와 싸우기"가 훨씬 적습니다. F #의 세부 사항에 대해 생각할 필요가 없습니다. 내가 찾은 것의 몇 가지 예는 다음과 같습니다.
예를 들어 F #이 정적으로 형식이 지정되었지만 (모든 형식이 컴파일 타임에 해결됨) 형식 유추는 어떤 형식이 있는지 파악하므로 말할 필요가 없습니다. 그리고 그것을 알아낼 수 없다면, 자동으로 함수 / 클래스 / 일반적인 것을 자동으로 만듭니다. 따라서 일반적인 내용을 작성할 필요가 없으며 모두 자동입니다. 즉, 문제에 대해 생각하고 구현하는 방법이 적다는 것을 의미합니다. 실제로 C #으로 돌아올 때 마다이 유형 유추를 놓친다는 것을 알았으므로 더 이상 필요하지 않을 때까지 어떻게 산만하게하는지 알지 못합니다.
또한 F #에서는 루프를 작성하는 대신 함수를 호출합니다. 루프 구성에 대해 더 이상 생각할 필요가 없기 때문에 미묘한 변화이지만 중요합니다. 예를 들어, 여기에 가서 무언가를 일치시키는 코드 조각이 있습니다 (프로젝트 오일러 퍼즐의 내용을 기억할 수는 없습니다).
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
C #에서 필터를 수행 한 다음 맵 (각 요소의 변환)을 수행하는 것은 매우 간단하지만 더 낮은 수준으로 생각해야한다는 것을 알고 있습니다. 특히 루프 자체를 작성하고 명시적인 if 문과 그 종류의 것들을 작성해야합니다. F #을 학습 한 이후로, 필터링하려는 경우 "필터"를 작성하고 매핑하려는 경우 구현하는 대신 "맵"을 작성하는 기능적인 방식으로 코딩하는 것이 더 쉽다는 것을 깨달았습니다. 각 세부 사항.
나는 또한 F #과 ocaml 및 다른 기능적 언어를 분리한다고 생각하는 연산자를 좋아합니다. 파이프 연산자이므로 한 표현식의 출력을 다른 표현식의 입력으로 "파이프"할 수 있습니다. 코드가 내가 생각하는 방식을 따르게합니다. 위의 코드 스 니펫에서와 같이 "인수 시퀀스를 가져 와서 필터링 한 다음 매핑하십시오." 루프와 if 문을 작성하는 데 너무 바빠서 명령형 프로그래밍 언어를 사용하지 않는 매우 높은 수준의 사고입니다. 다른 언어로 갈 때마다 가장 그리워하는 것은 바로 하나입니다.
따라서 일반적으로 C #과 F #으로 프로그래밍 할 수 있지만 더 높은 수준으로 생각할 수 있기 때문에 F #을 사용하는 것이 더 쉽다는 것을 알았습니다. 기능적 프로그래밍에서 최소한의 세부 사항이 제거 되었기 때문에 (적어도 F #에서는) 더 생산적이라고 주장합니다.
편집 : 나는 함수형 프로그래밍 언어에서 "상태"의 예를 요청한 의견 중 하나를 보았습니다. F #은 필수적으로 작성 될 수 있으므로 F #에서 변경 가능한 상태를 갖는 방법에 대한 직접적인 예는 다음과 같습니다.
let mutable x = 5
for i in 1..10 do
x <- x + i