0
저는이 상황을 몇 번 겪었습니다. 여기서는 이와 비슷한 논리 구조를 사용할 것입니다.중첩 된 If 문에서 중복 논리가 발생했습니다.
switch(someInteger)
{
case 1:
if(conditionA) {
if(conditionB) {
func1();
} else {
func2();
}
} else {
func3();
}
break;
case 2:
if(conditionA) {
if(conditionB) {
func4();
} else {
func5();
}
} else {
func6();
}
break;
case 2:
//ditto
case 3:
//ditto
case someObnoxiouslyHighNumber:
//ditto
}
각각의 구조는 동일하지만 유일한 차이점은 호출되는 기능입니다. 하지만 지금은 논리를 복제하고 있습니다. 단지 더러웠다. 이런 상황을 처리하는 더 우아한 방법이있는 것처럼 느껴지 긴하지만, 나는 아직 우연히 만났습니다.
리팩터링하는 방법에 대한 아이디어가 있으십니까?
편집 : 예제의 구조를 조금 변경하여 문제를 더욱 강조했습니다.
. 문제는 만약 내가이 logic을 적용하기를 원했던 someInteger의 12 가지 다른 값을 가지고 있었다면, 나는 내 손에 진짜 엉망이 될 것입니다. –
다른 값을 많이 추가하면'else if' 문을 더 길게 만듭니다. 그러나 구조는 동일하게 유지되며 목록을 쉽게 스캔하여 특정 조건을 찾을 수 있습니다. 그래서 나는 그것을 "진짜 혼란"이라고 생각하지 않을 것입니다. 그것은 필요한만큼 비늘만큼 명확하고 반복 가능한 구조를 제공합니다. – MattClarke