Untitled

객체를 다룰 수 있는 함수형 도구를 살펴봄

객체를 다루기 위한 고차 함수

필드명을 명시적으로 만들기

객체 관련 코드를 리팩토링

Untitled

위의 코드는 함수 이름에 있는 암묵적 인자 코드 냄새가 있어서 다음과 같이 암묵적 인자를 드러내기 리팩토링을 사용하여 수정함

Untitled

근데 increment 뿐만이 아니라 decrement, double, halve 등 여러 비슷한 동작이 많다

Untitled

update() 도출하기

하려는 동작만 다르지 다들 비슷하다. 이런 동작들이 지금은 함수 이름에 들어가 있다. 중복을 없애기 위해 이 함수들을 통해 어떤 객체라도 바꿀 수 있는 함수를 도출해 보자.

function incrementField(item,field) {
    var value = item[field];
    var newValue = value++;
    var newItem = objectSet(item, field, newValue);
    return newItem;
}
function updateField(item, field, modify) {
    var value = item[field];
    var newValue = modify(value);
    var newItem = objectSet(item, field, newValue);
    return newItem;
}

function incrementField(item, field) {
    return updateField(item, field, function(value) { // 값을 바꾸는 함수 전달
        return value++;
    })
}

인자명과 변수명을 일반적으로 변경하면 다음과 같음

function update(object, key, modify) {
    var value = object[key];
    var newValue = modify(value);
    var newObject = objectSet(object, key, newValue);
    return newObject;
}

값을 바꾸기 위해 update() 사용하기