다형성 높이기, _keys, error
each함수 null 대응
function _each(list, iter) {
for (var i = 0; i < list.length; i++) {
iter(list[i]);
}
return list;
}
기존 each 함수의 경우 list가 null일 경우 에러가 발생한다. null error 발생을 대비하여 _get 함수를 이용해보자.
function _get(obj, key) {
return obj === null ? undefined : obj[key];
}
function _each(list, iter) {
for (var i = 0; i < list.length; i++) {
iter(list[i]);
}
return list;
}
list.length부분에 undefined가 들어가게 되면 에러가 발생하지 않고 false로 떨어지기 때문에 바로 for문이 종료하게 된다.
var _length = _get('length');
function _each(list, iter) {
for (var i = 0; len = _length(list); i < len; i++) {
iter(list[i]);
}
return list;
}
_each함수를 이렇게 변경하게 되면 _each함수를 사용하는 _map과 _filter함수도 null에 대응할 수 있게 된다.
_map(null, function(v) {return v;}); //[]
_filter(null, function(v) {return v;}); //[]
_go(null,
_filter(function(v) { return v;}),
_map(function(v) { return v * v;}),
console.log); // []
이렇게 매번 null체크를 할 필요 없이 에러를 흘려보내는 방식을 사용하면 훨씬 유연한 프로그래밍이 가능하다.
//_keys만들기
console.log( Object.keys({ name: 'ID', age: 33 }) );
console.log( Object.keys([1, 2, 3, 4]) );
console.log( Object.keys(null) ); //error
function _is_object(obj) {
return typeof obj == 'object' && !!obj;
}
//!! 명시적 형변환을 위해(to Boolean)
function _keys(obj) {
return _is_object(obj) ? Object.keys(obj) : [];
}
//_keys를 이용하여 키값 확인
console.log( _keys({ name: 'ID', age: 33 }) );
console.log( _keys(null) );
_each함수의 외부 다형성 높이기
_each({
13: 'ID',
19: 'HD',
29: 'YD'
}, function(name) {
console.log(name);
});
위 each함수는 length가 없기 때문에 name이 나오지 않고 아무일도 일어나지 않는다.
length가 없어도 반복이 가능한 each함수로 만들어보자
function _each(list, iter) {
var keys = _keys(list);
for (var i = 0; len = keys.length; i < len; i++) {
iter(list[i]);
}
return list;
}
each함수 내부에 받은 list로 keys함수를 실행하게 되면 Object 여부를 확인하면서 배열을 반환하기 때문에 어떠한 형이 들어와도 반복문이 실행된다.
_map({
13: 'ID',
19: 'HD',
29: 'YD'
}, function(name) {
return name.toLowerCase();
});
_go(users,
_map(function(user) {
return user.name;
}),
_map(function(name) {
return name.toLowerCase();
}));
이렇게 map 함수를 사용할 때에 객체를 값으로 던져도 내부에서 배열로 변경되기 때문에 정상적으로 작동하는 걸 확인할 수 있다.
Author And Source
이 문제에 관하여(다형성 높이기, _keys, error), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@developerjune/다형성-높이기-keys-error저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)