개발을 하다보면 연속된 if문으로 인해서 혼란스러울 때가 있다.
이게 정확히 어떤 조건을 나눈 분기 처리인지 처음 짤 때는 이해 할수 있으나
나중에 시간이 좀만 지나면 이해하기 힘들다. 심지어 나도 그런데 남이 나중에 보았을 때 과연 분기를 제대로 이해할 수 있을까?
그래서 직관적으로 이해할 수 있게 if문을 나누어야만 한다.
if( A === true){
if( B > 10){
...
}else if ( B > 20 ){
...
} else if ( B > 30){
..
}
}else{
...
}
이런 경우 조금 정신이 없다.
if (A === true){
if(B > 30){
return ...
}
if( B > 20){
return ...
}
if( B > 10){
return ...
}
return ...
}
return ...
이런 방식이 더 깔끔하다. 명확히 어떤 조건에 의해서 return 값이 나오는지 분명하다.
2.동일 값 return이면 OR(||) 으로 한꺼번에 묶기
if (A > 10 ) { return true }
if( B > 10 ) { return true }
>
if (A > 10 || B > 10 ) { return true }
다만 내 생각으론 의미론상 다른 상황에서 return 값만 같은 거라면 분리하는 게 맞다고 본다. 그래야 이게 어떤 상황에서 분기된 거란 걸 직관적으로 이해할 수 있기 때문이다.
3.function으로 따로 빼서 이게 어떤 걸 구하는 건지 명시
if( A.health === true) {
return checkHasValidAge(A)
}
return checkPossibilityOfRecoverHealth(A)
function checkHasValidAge(A){
if(A.age >20) { return true}
return false
}
function checkPossibilityOfRecoverHealth(A){
if(A.Energy > 10 || A.cover > 1000) { return true }
...
...
return false
}
이렇게 function으로 해당 분기가 '이러이러한 걸 확인하고 있다'를 나누어 놓으면 따로 주석이 필요 없으며 중간중간 console을 찍어보며 디버깅 하기도 쉽다. 게다가 test할때 해당 function만 따로 test할 수 있어 좋다. 즉 이런 function을 이용한 분기 처리는 리펙토링을 용이하게 하는 방법이다.