"함수 프로그래밍"이라는 용어에는 두 가지 의미가 있습니다.
첫 번째 의미는 프로그램이 기능을 조작 할 수있는 능력입니다. 모든 언어가 이것을 할 수있는 것은 아니지만 자바 스크립트는 가능한 언어 중 하나입니다. 함수를 변수에 할당하고, 함수를 인수로 전달하고, 함수를 반환하는 함수를 함수형 프로그래밍 언어라고하며, 자바 스크립트는 그대로 작동합니다.
이러한 의미에서 콜백이 널리 사용되는 현대 자바 스크립트 코드를 살펴보면 이미 함수형 프로그래밍을 수행하고있는 것입니다.
함수 프로그래밍의 두 번째 의미는 프로그램 작성의 기본 방법이 변수가 아닌 함수 인 프로그래밍 스타일입니다. 이런 의미에서 변수 할당과 루프 구조 (대신 재귀 사용)를 피함으로써 거의 모든 언어를 함수 스타일로 사용할 수 있습니다.
기능 공동체를 살펴보면 기능적으로 의미하는 것은 첫 번째 의미와 두 번째 의미의 매우 강력한 버전입니다. 즉, 변수는 피할 수 없지만 금지됩니다. Haskell과 같은 언어에는 변수 개념이 없습니다. I/O와 같은 부작용과 변경 가능한 상태를 처리하기 위해 모나드라는 개념을 사용합니다.
그렇게 멀리 가지 않아도됩니다. Lisp과 Forth와 같은 고전적인 기능 언어는 변수를 허용했다. 당신은 가능한 한 그들을 피해야합니다.
Lisp 및 Forth 스타일 함수 프로그래밍은 임시 변수에 아무 것도 지정하지 않고리스트/배열을 처리함으로써 크게 유도됩니다. 어떤 사람들에게는이 스타일을 읽기가 더 쉽습니다. 필수적 스타일이 할 줄 경우 : 기능적인 스타일에
var a = [1,2,3];
var b = 0;
for (var i=0;i=a.length;i++) {
b += a[i] * 2;
}
// result is in b
당신이 할 거라고 :
[1,2,3].
map(function(x){return x*2}).
reduce(function(x,y){return x+y},0);
개념적으로, 기능적인 스타일이 대신 배열에 필터를 적용하는 것처럼 보이게 만든다 배열을 반복하는 것. grep
과 같은 명령 줄 도구를 사용한 적이 있다면이 개념을 매우 잘 알고있을 것입니다.
기능적 스타일에서 변수 할당을 전혀 도입하지 않았다는 것에 주목하십시오.
기능적 스타일의 3 가지 핵심 배열 방법/기능은 map
, reduce
및 filter
입니다. 그들로 90 % for-loops와 같은 것을 피할 수 있습니다.
나는 이것이 어떤 유형의 답변을 얻는 지 정말로 기대하고 있습니다. 개인적으로 Javascript로 구현하기 전에 기능적 언어를 조금 배우는 것이 더 쉬울 수도 있습니다. 보십시오 [당신에게 하스켈을 배우십시오] (http://learnyouahaskell.com/). 기본은 어렵지 않으며 기능적 사고의 장애물을 극복하는 데 도움이됩니다. – dg123