I 다음 switch 문이 : 그래서리팩터링 큰 switch 문
switch (type) {
case 1: // 1 BYTE 8-bit unsigned integer
pointer = count > 4 ? offset : pointer;
for (let i = 0; i < count; i++) {
value += dataView.getUint8(pointer + i);
}
tag.value = parseInt(value, 10);
return tag;
case 3: // 3 SHORT 16-bit unsigned integer
pointer = count > 2 ? offset : pointer;
for (let i = 0; i < count; i++) {
value += dataView.getUint16(pointer + 2 * i, littleEnd);
}
tag.value = parseInt(value, 10);
return tag;
case 4: // 4 LONG 32-bit unsigned integer
pointer = count > 1 ? offset : pointer;
for (let i = 0; i < count; i++) {
value += dataView.getUint32(pointer + 4 * i, littleEnd);
}
tag.value = parseInt(value, 10);
return tag;
case 5:
...
하고 있습니다.
패턴은 약간의 변형이있을 때마다 동일합니다. 어떻게 이것을 리팩토링 할 수 있습니까? 케이스 내부의 패턴을 리팩터링하고 전체 스위치 블록을 제거하려고합니다. 그게 가능하니?
나는 switch 문이 아마도 가치가 있다고 생각한다. 개별 사례 블록을 자체 함수로 끌어 와서 리팩토링을 시작합니다. 그러면 테스트 및 디버그가 더 쉬워집니다. –
최소 공통 분모는 포인터를 초기화하는 것으로 보입니다. 값 + = dataView.GetSomeValue (pointerLocation, littleEnd) 태그에 대한 (i = 0, i