나는 꽤 긴 속성 이름을 가진 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로 지정하면 문제가 없습니다.