1. Pure Functions
// X
const num = 1;
function add(a) {
return a + num;
}
// O, Pure Functions
function add(a, b) {
return a + b;
}
const result = add(2, 3);
Pure Functions (순수 함수)
- 동일한 인자를 넣었을 때 항상 동일한 결과 값을 반환
- 언제 선언이 되었는지, 외부에 전혀 영향을 받지 않음
- 함수에서 외부의 상태 값을 참조하거나 외부의 상태를 변경하지 않음
2. Stateless, Immutability ( 비상태, 불변성 )
side effect
를 만들지 않으므로 불변성을 유지할 수 있음side effect : 함수를 호출하면 외부의 상태가 변경되거나, 예상하지 못한 에러가 발생
// X
const person = { name: 'kim', age: 20 };
function increaseAge(person) {
person.age = person.age + 1;
return person;
}
// O, Stateless, Immutability
const person = Object.freeze({ name: 'kim', age: 20 })
function increaseAge(person) {
return { ...person, age: person.age + 1};
}
3. Expressions Only
// X
const numbers = [1, 2, 3];
function multiply(number, multiplier) {
for (let i = 0; i < numbers.length; i++) {
number[i] = number[i] * multiplier;
}
}
// O, expressions
function multiply(numbers, multiplier) {
return numbers.map(num => num * multiplier);
}
4. First-class and higher-order functions
First Class
의 특징과 고차함수
의 속성을 가지고 있어야 함First Class (일급함수) : 다른 데이터와 마찬가지로 함수를 변수에 할당하거나 함수에 인자로 전달하거나 리턴하는 등의 일들을 할수 있음
고차함수 : 함수 자체를 인자로 전달하거나 함수에서 또 다른 함수를 리턴하는 속성을 가진 함수
// First-class
const addTwo = a => a + 2;
const multiplyTwo = a => a * 2;
const transform = numbers => numbers.map(addTwo).map(multiplyTwo);
console.log(transform([1, 2, 3, 4]); // [6, 8, 10, 12]
// higher-order functions
const addToppings = topping => food => food + topping;
const egg = addToppings('E');
const bacon = addToppings('B');
console.log(egg('K')); // KE
console.log(bacon('J')); // JB