부정 강조 문을 작성하고

나는 꽤 긴 속성 이름을 가진 if 문을 작성하고 있었고이 문제를 겪었습니다.

다음과 같은 if 문이 있다고 가정 해 봅시다.

if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue &&
   !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant)
{
    //Do something
}

두 번째 속성은 부울 유형이며 다음과 같은 전략을 갖는 것은 의미가 없습니다.

if(boleanValue == true)

(가) 넣어 그 부정을 강조하기 위해 더 나은 방법이 !앞에서는. 나에게 이것은 코드를 읽을 때 쉽게 감독 할 수 있고 디버깅에 문제를 일으킬 수있는 것처럼 보입니다.



답변

if(_someViewModelNameThatIsLong.NeedsMeToDoSomething(someValue))
{
    //Do something
}

그런 다음 뷰 모델 객체에서

public bool NeedsMeToDoSomething(string someValue)
{
    return AnotherPropertyINeedToCheck == someValue &&
        !ThisIsABooleanPropertyThatIsImportant;
}

(someValue가 문자열이고 모델 객체에 의해 알려져 있지 않다고 가정)

이것 만 강조합니다! 연산자이지만 일반적으로 더 읽기 쉽습니다. 이제 호출 메소드에서 호출 오브젝트의 컨텍스트에서 조건을 설명하기 위해 이름을 지정해야하는 하나의 조건을 볼 수 있습니다. 그리고 모델 객체에서, 그것이 모델 객체의 맥락에서 그것이 무엇을 의미하는지 볼 수 있습니다.


답변

덜 중요한 조건을 평가하기 전에 자체 차단 블록에 넣으십시오. 다른 조건이 복잡하지 않으면 쉽게 읽을 수있을뿐만 아니라 프로그래머가 읽을 수있는 첫 번째 조건이기도합니다. 이것을 @scrwtp에서 이미 언급 한 아이디어와 결합하여 의미있는 이름을 가진 변수에 할당하면 다음과 같은 결과가 나타납니다.

var isValid = !_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant;
if( isValid )
{
    if( _someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue )
    {
        //Do something
    }
}

컴파일러 언어로 프로그래밍하는 경우 외부 if와 내부 if 사이에 코드를 삽입하지 않는 한 대부분의 경우 중첩 된 if 블록은 결국 끝에 결합되므로 이러한 성능에 영향을 미치지 않습니다. 사례.


답변

C / C ++를 사용하는 경우 전처리 기가 가독성을 제공 할 수 있습니다.

#define NOT !

if(_someViewModelNameThatIsLong.AnotherPropertyINeedToCheck == someValue &&
    NOT _someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant)
{
    //Do something
}

답변

난 그냥 추출

`!_someViewModelNameThatIsLong.ThisIsABooleanPropertyThatIsImportant`

이것을 돌려주는 Method in 이 메소드의 이름을 NotThisIsABooleanPropertyThatIsImportant로 지정하면 문제가 없습니다.