소년코딩

함수형 프로그래밍은 프로그래밍의 여러 가지 패러다임중 하나이다.

함수형 프로그래밍이란 함수의 조합으로 작업을 수행하는것을 말한다. 

중요한 것은 이 작업이 이루어지는 동안 작업에 필요한 데이터와 상태는 변하지 않고, 변할 수 잇는건 오로지 함수 뿐이라는거다.

 

자바스크립트에서도 함수형 프로그래밍이 가능한데 그 이유는 자바스크립트가 다음을 지원하기 때문이다.

  • 일급 객체로서의 함수
  • 클로저(closure)

그래서 함수의 인자로 함수를 넘기고, 결과로도 함수를 받을 수 있다.


배열의 각 원소 총합, 곱한 값 구하기

- 명령형 프로그래밍 방식

// 명령형 프로그래밍 방식의 총합
function sum(arr) {
     var i = 0; sum = 0;
     for(; i < arr.length; ++i) {
          sum += arr[i];
     }
     return sum;
}

// 명령형 프로그래밍 방식의 총곱
function multiply(arr) {
     var i = 0; result = 1;
 
     for(; i < arr.length; ++i) {
          result *= arr[i];
     }
 
     return result;
}
 
var arr = [1, 2, 3, 4];

console.log(sum(arr));   // 10
console.log(multiply(arr));   // 24

위 코드는 명령형 프로그래밍 방식으로 작성된 코드다.

문제 하나하나를 각각의 함수를 구현하여 풀고있으며, 배열의 각 원소를 또 다른 방식으로 산술하여 결과값을 얻으려면 새로운 함수를 다시 구현해야한다.

그러나 함수형 프로그래밍 방식을 이용하면 이러한 수고를 덜 수 있다.

 

- 함수형 프로그래밍 방식

function reduce(fn, arr, memo) {
    var len = arr.length;
    var i = 0;
    var accum = memo;

    for( ; i < len; ++i ) {
        accum = fn(accum, arr[i]);
    }
}

var arr = [1, 2, 3, 4];

var sum = function(x, y) {
    return x + y;
};

var multiply = function(x, y) {
    return x * y;
};

console.log(reduce(sum, arr, 0));       // 10;
console.log(reduce(multiply, arr, 1));  // 24;

함수형 프로그래밍

위와 같이 함수형 프로그래밍을 이용하여 코드를 훨씬 간결하게 작성할 수 있다.

또한 다른 문제가 나오더라도 해당 연산을 하는 함수를 작성하여 reduce()함수로 결과를 얻을수 있다.


 

자바스크립트

by 소년코딩

추천은 글쓴이에게 큰 도움이 됩니다.

악플보다 무서운 무플, 댓글은 블로그 운영에 큰 힘이됩니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기