개발 일기

함수형 프로그래밍 정리 (Functional Programming) javasciprt

권쓰 2020. 10. 28. 20:24
728x90

함수형 프로그래밍


함수형 프로그래밍의 조건

1. 인풋이 있고, 아웃풋을 return 하는 형태의 함수

- 부작용이 없는 순수함 : 함수가 인풋만을 받아서 인풋만을 사용하고 아웃풋을 계산하여 리턴해야 함.


2. 다른함수를 인풋 또는 아웃풋으로 사용 (고차함수)

- ex) map, reduce, filter


3. 모든 데이터를 불변으로 생각하기

var rooms = ['h1', 'h2', 'h3'];

rooms[2] = 'h4'      <--- WRONG!


var newRooms = rooms.map(function(rm) {

if (rm === 'h3') {

return 'h4';

} else {

return rm;

}

});


newRooms => ['h1', 'h2', 'h4'];

rooms => ['h1', 'h2', 'h3'];


출처 : youtube jsconf 채널의  Anjana Vakil - JSUnconf

https://www.youtube.com/watch?v=e-5obm1G_FY





<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/**
함수형 프로그래밍은
성공적인 프로그래밍을 위해 부수효과를 미워하고 조합성을 강조하는 프로그래밍 패러다임
- 부수효과를 미워한다 -> 순수함수를(들어온 인자가 같으면 동일한 리턴값) 만든다.
함수가 받은 인자 외에 다른 외부의 상태에 영향을 받지않는 함수.
리턴값 외에는 다른것과 연관이 없도록.
- 조합성을 강조하다 => 모듈화 수준을 높인다.(생산성을 높인다(팀웍, 재사용성))
*/

/** 순수함수 (동일한 인자 --> 동일한 리턴) */
function add(a, b) {
return a + b;
}
console.log('function add 순수함수')
console.log(add(2, 3));
/** 결과가 달라지는 함수는 순수함수가 아님 */
var c = 10;
function add2(a, b) {
return a + b + c;
}
console.log('function add2 외부값을 참조하는 함수')
console.log(add2(1,2));
console.log(add2(2,3));
console.log(add2(3,4));

c = 20; // 외부 참조값을 바꾸게되면 return값도 달라짐
console.log(add2(1,2));
console.log(add2(2,3));
console.log(add2(3,4));


var c = 20;
function add3(a, b) {
c = b;
return a + b;
}
console.log('function add3 함수 내에서 외부값을 변경하는 함수')
console.log(c);
console.log(add3(20, 30));
console.log(c);

var obj = {
val: 10
}
function add4(obj, b) { // 순수함수도 아니고 인자값을 직접 변경한다.
obj.val += b;
}
console.log('function add4 함수 내에서 인자값을 직접 변경하는 함수')
console.log(obj.val);
add4(obj, 20);
console.log(obj.val)


// 다시 순수 함수
var obj1 = {
val: 10
}
function add5(obj, b) {
return {
val: obj.val + b
};
}
console.log('function add5 전달받은 인자만 활용하는 순수함수')
console.log(add5(obj1, 20));


</script>
</body>
</html>