다음 코드는 lodash의 negate
함수의 소스 코드입니다. 우리가 볼 수 있듯이 매개 변수의 길이가 4보다 작 으면 apply
대신에 switch-case
을 직접 사용합니다. 이 코드에 대한 어떤 마법? 성능이 향상 되었습니까? 그리고 분리 점이 4 인 이유는 무엇입니까?lodash가 negate 함수에서 switch-case를 사용하는 이유는 무엇입니까?
function negate(predicate) {
if (typeof predicate != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
return function() {
var args = arguments;
switch (args.length) {
case 0: return !predicate.call(this);
case 1: return !predicate.call(this, args[0]);
case 2: return !predicate.call(this, args[0], args[1]);
case 3: return !predicate.call(this, args[0], args[1], args[2]);
}
return !predicate.apply(this, args);
};
}
잘 모르겠지만 'switch'가'if..else' 래더보다 잘 수행된다고 생각합니다. 또한 타이핑도 적습니다. – Rajesh
OP의 질문은'if..else' 대신'switch'를 사용하는 이유가 아닙니다. 문제는 조건부가있는 이유입니다. – JanS
스플릿 포인트는 4입니다. 왜냐하면 당신은 자신이 반복하지 않는 한, oop에서 3 개 이상의 매개 변수를 사용하는 함수가 없어야합니다. (또한 손으로 더 많은 경우를 하드 코딩하는 것은 상당히 고통스럽고 지루합니다) . 그리고 그들은 아마도 벤치 마크를했을 것입니다.'apply'는 아마도'call' 메소드보다 느릴 것입니다. –