박철순
함수형 프로그래밍 - 1 본문
해당 글은 인프런에 "자바스크립트로 알아보는 함수형 프로그래밍(ES5)"를 보고 작성했습니다.
그리고 저의 메모겸 생각정리를 위해 틀린 내용이 있을 수 있습니다.
[무료] 자바스크립트로 알아보는 함수형 프로그래밍 (ES5) - 인프런 | 강의
마플(http://www.marpple.com)의 CTO 유인동님이 알려주는 함수형 프로그래밍에 대한 강좌 입니다. 함수형 프로그래밍으로 라이브러리를 직접 만들어가며 함수형 프로그래밍의 패러다임과 코딩의 즐거
www.inflearn.com
함수형 프로그래밍이란?
- 부수 효과를 미워하고, 조합성을 강조한다.
- 순수함수로 조합하는 프로그래밍이다.
- 모듈화 수준이 높다.
순수함수란?
- 순수 함수는 부수효과가 없는 함수이다.
- 들어온 인자가 같으면 언제 어디서든 호출해도 항상 동일한 결과를 리턴함. (중요)
- 함수가 받은 인자 외에 외부상태에 영향을 끼치지 않는다. 리턴값 외에는 외부와 소통이 없는 함수
function add(a,b) {
return a + b;
}
const addNumber1 = add(1,3) // 4
const addNumber2 = add(2,8) // 10
let c = 10;
function add2(a,b) {
return a + b + c;
}
const add2Number = add2(1,5) // 16
let c = 20;
function add3(a,b) {
c = b;
return a + b;
}
console.log(c); // 20
const add3Number = add3(20,30); // 50
console.log(c); // 30
const obj1 = { val : 10 };
function add4(obj,b) {
obj.val += b;
}
console.log(obj1.val); // 10
const add4Number = add4(obj1, 20);
console.log(obj1.val); // 30
const obj2 = { val : 10 };
function add5(obj, b) {
return { val : obj.val + b };
}
console.log(obj2.val) // 10;
const add5Number = add5(obj2, 20);
console.log(obj2.val) // 10;
위 코드를 보면 add는 순수함수지만 add2는 순수함수가 아닙니다.
왜냐하면 c라는 변수로 부수효과가 생기기 때문에 만약 add2Number 밑에 c 의 값을 바꾸게 되면, 같은 인자여도 다른 결과값이 나오기 때문에 순수함수가 아닙니다. 그러나 c 변수가 상수이면 순수함수입니다.
add3 는 같은인자를 넣으면 같은 결과값이 나오지만, 외부의 값을 함수 내에 변경는 부수효과가 있기 때문에 순수함수가 아닙니다.
add4는 리턴값도 없고 인자로 들어온 상태를 직접 변경하는 함수이기때문에 순수함수가 아닙니다.
그러면 함수형프로그래밍에서 객체를 사용할때는?
- 객체의 값들을 복사해서 원하는 부분에 값이 변형된 새로운 값이 리턴해서 사용하면 됩니다.
위 코드에 add5처럼 입니다.
'Javascript > 함수형 프로그래밍' 카테고리의 다른 글
함수형 프로그래밍 - 2 (0) | 2022.08.26 |
---|