본문 바로가기
Programming/삽질일기

[TIP] 부정조건문은 의미해석이 쉽지 않다.

by kghworks 2022. 3. 8.

일반적으로 if 문은 아래와 같이 진행됩니다.

if(){
    //진행
    
}else{
    //예외를 던짐
    
}

 

코드를 진행하기에 앞서 if문으로 검사를 하고 예외의 경우 else문에서 예외를 던집니다.

 

예시

문자열이 비었는지를 체크하고 코드를 진행하는 로직을 2가지로 제시해보겠습니다.

 

if(!isEmpty(exStr)){
    execute();
}else{
    throw new Exception("String is empty!");
}

 

if(hasContent(exStr)){
    execute();
}else{
    throw new Exception("String is empty!");
}

 차이점은 첫번째 방법은 조건문에 부정연산자가 들어갔다는 것입니다. 결론은 두번째 방법이 좀더 클린한 코드가 되겠습니다. 왜냐면 아래와 같이 조금만 조건문의 의도가 복잡해져도 헷갈리기 때문입니다.

 

if(!A.isBiggerThan(B)){
    execute();
}else{
    throw new Exception("A is Bigger than B!");
}

if(A.isSmallerThan(B)){
    execute();
}else{
    throw new Exception("A is Bigger than B!");
}

 

 두 조건절은 똑같이 A가 B보다 작을 경우에만 실행하지만 알고리즘의 의도를 파악하기에는 두번째가 더 쉽습니다.

 

결론

 이렇듯 일반적인 조건문에서 실행하고자하는 첫 if문의 조건문에는 부정연산자가 들어가지 않는 "참인 경우"를 연산하는 것이 알고리즘의 의도를 파악하기에 더 용이합니다.

 


참고

https://schneide.blog/2014/08/03/dont-ever-not-avoid-negative-logic/

 

Don’t ever not avoid negative logic

If you want to be nice to people with a challenged relationship with boolean logic, try to avoid negative formulations and negations.

schneide.blog

 

댓글