JavaScript의 순수 함수
12764 단어 functionaljavascript
순수 기능이란 무엇입니까?
함수가 순수 함수가 되기 위한 2가지 간단한 규칙이 있습니다.
1. There will be always the same output for the same input.
2. There will be no side effects.
코드를 봅시다.
const add = (a,b) => a + b;
add(1,2); // 3
여기서 add 함수는 순수 함수입니다.
이 함수는 2개의 인수
a
및 b
를 사용하고 항상 a + b
인 인수에 대해 동일한 결과를 제공하기 때문입니다.다른 코드를 보자.
let user = {
firstName: "Michael",
lastName: "Jackson",
gender: "M"
}
function getFullName(user) {
return `${user.firstName} ${user.lastName}`;
}
console.log(getFullName(user)); // Michael Jackson
코드 조각에서
getFullName
는 getFullName
상태를 변경하지 않기 때문에 순수 함수입니다.불순 함수는 무엇입니까?
1. Create/update database.
2. http/s call.
3. Change the file system.
4. Mutate the state.
etc
Math.random();
Math.random()
는 항상 다른 출력을 반환하기 때문에 불순한 함수입니다.console.log
는 순수 함수이며 모든 입력에 대해 정의되지 않음을 반환합니다.번호
console.log
는 부작용이 있기 때문에 순수 기능이 아니며, console.log
는 다른 공유 환경을 사용하여 콘솔에 로그인합니다.const add = function (a,b){
console.log("added");
return a + b;
}
add(1,2); // 3
위의 코드 스니펫에서 동일한 입력에 대해 동일한 출력을 얻고 있으며
console.log
가 출력에 영향을 미치지 않으며 순수 함수가 아님을 알 수 있습니다. add
함수에는 부작용이 있기 때문입니다.let user = {
firstName: "Michael",
lastName: "Jackson",
gender: "M"
}
function getFullName(user) {
user.firstName = user.gender === "M" ? `Mr. ${user.firstName}`: `Mrs. ${user.firstName}`;
return `${user.firstName} ${user.lastName}`;
}
console.log(getFullName(user)); // Mr. Michael Jackson
여기 코드 조각
getFullName
에서 getFullName
가 상태를 변경하기 때문에 불순한 함수가 있습니다. 함수 정의 내에서 객체 속성에 값을 할당합니다.순수 대 불순
불순한 함수는 외부 상태를 변경합니다.
let cart = {
items: [{
name: "X",
price: 10,
quantity: 1
}]
}
function addItem(cart){
let newCart = {...cart}
newCart.items.push({
name: "Y",
price: 5,
quantity: 2
});
return newCart;
}
console.log(cart); // {items: Array(1)}
let newCart = addItem(cart); // changing state
console.log(cart); // {items: Array(2)}
console.log(newCart); // {items: Array(2)}
순수 함수는 외부 상태를 변경하지 않습니다. 약간의 변경으로 위의 함수를 순수하게 만들 수 있습니다.
let cart = {
items: [{
name: "X",
price: 10,
quantity: 1
}]
}
function deepClone(value){
return JSON.parse(JSON.stringify(value)); // for example purpose
}
function addItem(cart){
let newCart = deepClone(cart);
newCart.items.push({
name: "Y",
price: 5,
quantity: 2
});
return newCart;
}
console.log(cart); // {items: Array(1)}
let newCart = addItem(cart); // changing state
console.log(cart); // {items: Array(1)}
console.log(newCart); // {items: Array(2)}
우리가 볼 수 있는 스니펫에서 순수 함수는 장바구니를 변경하지 않고 대신 장바구니를 복사하여 반환 값으로 보냅니다. 이로 인해 원래 카드는 변경되지 않습니다.
react, redux를 사용한다면 순수 함수를 사용하는 것을 볼 수 있을 것입니다.
Pure function can be easily predicted, it is convenient to test. Pure function makes state management easier.
Reference
이 문제에 관하여(JavaScript의 순수 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/_prosen/pure-function-in-javascript-c2n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)