다음은 매우 간단한 예 입니다. 이것은 언어 별 질문 일 필요는 없으며 , 함수를 작성할 수있는 다른 많은 방법과 그에 대한 변경을 무시할 것을 요청합니다. . 색깔은 유일한 유형입니다
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
else
{
return "No you can't";
}
}
내가 만난 많은 사람들, ReSharper, 그리고이 사람 (이 의견은 내가 이걸 잠시 묻고 싶다고 생각 나게했다 else
.)
(나는 대다수가 한 말을 기억할 수 없다.
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
return "No you can't";
}
질문 :else
블록을 포함하지 않아서 복잡성이 증가 합니까?
else
두 블록의 코드가 직접적으로 관련되어 있다는 사실을 말함으로써 더 직접적인 상태의 의도에 감동하고 있습니다.
또한 논리의 미묘한 실수, 특히 나중에 코드를 수정 한 후에도 미묘한 실수를 예방할 수 있다는 것을 알았습니다.
단순화 된 예제의 변형을 생각해보십시오 (이것은 or
의도적으로 단순화 된 예제이므로 연산자를 무시하십시오 ).
bool CanLeaveWithoutUmbrella()
{
if(sky.Color != Color.Blue)
{
return false;
}
return true;
}
누군가는 이제 if
첫 번째 조건이 자신의 조건에 제약 조건을 적용하고 있음을 즉시 정확하게 인식하지 않고 첫 번째 예 이후 조건에 따라 새 블록을 추가 할 수 있습니다 .
는 IF else
블록은 새로운 조건의 내용을 이동 이동하도록 강요 될 것이다 추가 누구든지 존재였다 else
블록 (그들이 얼버무 어떻게 든 경우는 추론이 하나의 경우는하지 않는 코드는 도달 할 수없는 표시됩니다 if
다른 제약) .
물론 특정 예를 정의해야하는 다른 방법이 있습니다. 이러한 모든 상황은 그러한 상황을 방지하지만 단지 예일뿐입니다.
내가 제시 한 예제의 길이는 이것의 시각적 측면을 왜곡시킬 수 있으므로, 괄호로 채워진 공간이 나머지 방법에 상대적으로 중요하지 않다고 가정하십시오.
else 블록의 생략에 동의하는 경우를 언급하는 것을 잊어 버렸고 if
블록을 사용하여 null-check (또는 다른 경비원)와 같은 모든 후속 코드에 논리적으로 충족 되어야 하는 제약 조건을 적용 하는 경우를 언급했습니다. .
else
조항을 작성할 때 더 읽기 쉽다는 것에 동의합니다 (제 취향에 따라 불필요한 괄호를 생략하면 훨씬 더 읽기 쉽습니다.) 위의 경우에 나는 return sky.Color == Color.Blue
(if / else없이) 쓸 것이다 . bool과 다른 리턴 타입을 가진 예제는 아마도 이것을 더 명확하게 만들 것이다.