당신은하지 필요성에게 코드를 실행할 수 multilpe if
블록을한다. 표시된 바와 같이 here은 하나의 부울 표현식을 사용하여 루프 반복을 건너 뛸 지 여부를 나타낼 수 있습니다.
(x > 5) && (!DateTime.TryParse(y, out z) || w.CompareTo(z) == -1)
이와 같이 루프 내부와 같은 복잡한 조건을 포함하면 가독성이 저하 될 수 있습니다.
while(!done) // or whatever the while loop condition is
{
if(itemIsValid(x, y, w, out z))
{
//the rest of your loop
}
}
//it may make sense for x, y, w, and possibly z to be wrapped in an object, or that already may be the case. Consider modifying as appropriate.
//if any of the variables are instance fields they could also be omitted as parameters
//also don't add z as an out parameter if it's not used outside of this function; I included it because I wasn't sure if it was needed elsewhere
private bool itemIsValid(int x, string y, DateTime w, out DateTime z)
{
return (x > 5)
&& (!DateTime.TryParse(y, out z) || w.CompareTo(z) == -1)
}
이 몇 가지 장점이 있습니다 : 루프 이런 식으로 뭔가를 보았다 그래서 개인적으로, 나는 간단하게하는 방법으로이 조건을 추출합니다. 첫째, 주석을 필요없이 코드를 스스로 문서화하는 방법입니다. 루프를 볼 때 "내가 끝내지 않은 상태에서 항목이 유효하면이 모든 작업을 수행합니다"라고 읽을 수 있습니다. 타당도가 정의 된 방법에 관심이있는 경우 메서드를 살펴보고, 그렇지 않으면 건너 뜁니다.메소드의 이름을 "isReservationSlotFree"또는 실제로 표시되는 것과 같은 더 구체적인 이름으로 변경할 수도 있습니다.
유효성 검사 논리가 복잡한 경우 (다소 복잡함) 더 복잡한 루프를 어지럽히 지 않고 설명과 설명을 추가 할 수 있습니다.
코드에 아무 문제가 없다고 생각합니다. 당신이 할 수 있기 때문에 한 줄에 모든 것을 삽으로하려고하지 마십시오. – nemesv
@nemesv 전적으로 동의합니다. 말하기 변수 이름과 짧은 설명을 사용하여 휴식 이유를 설명하는 것이 좋습니다. – lupz
실제로 두 점은 모두 내 코드에서 처리됩니다. 실제 변수 이름은 너무 길기 때문에 게시하기 전에 대체했습니다. 왜 루프가 깨져야하는지 설명하는 바로 앞에 주석이 있습니다. – Ozzyberto