개발 일기
함수형 프로그래밍 정리 (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>