Funtional programming

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 비함수형
var arr1 = [1,2,3];
console.log(arr1);

var arr2 = [];
for (var i=0; i<arr1.length; i++) {
arr2.push(arr[i] * 2);
}

console.log(arr2);


// 함수형
//기반 함수 생성
function mapForEach(arr, fn) {
var newArr = [];
for (var i=0; i<arr1.length; i++) {
newArr.push(
fn(arr[i])
)
};

return newArr;
}

// 기반함수에다 다른 함수를 인자로 넣어 다양하게 활용 가능
var arr2 = mapForEach(arr1, function(item) {
return item * 2;
});
console.log(arr2);

var arr3 = mapForEach(arr1, function(item) {
return item > 2;
})


// 인자 수가 다른 함수는 어떻게 활용할 수 있을까?
var checkPastLimit = function(limiter, item) {
return item > limiter;
}
// bind()로 limiter 인자 기본값 지정해주면 가능
var arr4 = marForEach(arr1, checkPastLimit.bind(this, 1));

// 매번 bind() 달지않고 싶다면
//bind() 포함한 새로운 함수를 만들어서
var checkPastLimitSimplified = function(limiter) {
return function(limiter, item) {
return item > limiter;
}.bind(this, limiter);
};
var arr5 = mapForEach(arr1, checkPastLimitSimplified(1));
console.log(arr5);

함수형 프로그래밍은 1급함수 성질을 활용해서, 각각의 함수를 인자나 리턴으로 또 함수를 전달하도록 해서 보다 단순화되고 효율적인 코드를 작성할 수 있다.

함수형 프로그래밍에 대한 이해도를 좀 더 높히고 싶다면 아래의 라이브러리 함수들을 직접 구현해 보는 것을 추천한다. codestates pre course에서도 비슷한 것을 경험한 적이 있는데, 가장 기본적인 함수들을 재사용 해서 다른 라이브러리 함수 로직을 직접 구현해 보는 연습을 할 수 있다.

Underscore.js 도전하기!


Next

call bind apply

Share