7장 유연한 함수를 만들어라

설아아빠·2021년 12월 26일
0
post-thumbnail

1. 화살표 함수로 복잡도를 낮춰라

        const name = {
            first: 'a',
            last: 'test'
        }

        function getName({first, last}) {
            return `${first} ${last}`;
        }

        const getName2 = ({first, last}) => `${first} ${last}`;

        console.log(getName(name));
        console.log(getName2(name));
        

2. 나머지 매개변수로 여러 개의 인수를 변수로 전달하라

        const building = {
            addr: 'a'
        };

        const manager = {
            name: 'manager'
        };

        const program = {
            room: '415'
        };

        function merge() {
            const {addr} = building;
            const {name} = manager;

            const defaults = {
                name: name,
                addr: addr
            };

            return program => {
                return {...defaults, ...program};
            };
        }

        console.log(merge()(program));

3. 커링과 배열 메서드를 조합한 부분 적용 함수를 사용하라

        const dogs = [{
            name: '맥스',
            color: 'red'
        }, {
            name: '홀랑이',
            color: 'blue'
        }];

        function getDogNames(filter) {
            const [key, value] = filter;
            return dogs.filter(dog => dog[key] === value).map(dog => dog.name);
        }

        console.log(getDogNames(['color', 'red']));

        function getDogNames2(filterFunction) {
            return dogs.filter(filterFunction).map(dog => dog.name);
        }

        console.log(getDogNames2(dog => dog.color === 'blue'));

        const weightCheck = color => dog => dog.color === color;

        console.log(getDogNames2(weightCheck('red')));

4. 화살표 함수로 문맥 혼동을 피하라

        const validator = {
            message: '는 유효하지 않습니다',
            setMessage(field) {
                return `${field} ${this.message}`;
            },
            setMessage2(...fields) {
                return fields.map(function (field) {
                    return `${field} ${this.message}`;
                });
            },
            setMessage3(...fields) {
                return fields.map(field => {
                    return `${field} ${this.message}`;
                });
            },
        }

        console.log(validator.setMessage('test'));

        console.log(validator.setMessage2('test'));//error

        console.log(validator.setMessage3('test'));
profile
back-end(java), front-end (조금)

0개의 댓글