코드에서 들여 쓰기를 방지하기 위해 어떤 단계와 조치를 취할 수 있습니까?
답변
프로그램의 모든 함수 / 메소드가 단 하나만 수행하면 깊은 들여 쓰기는 일반적으로 문제가되지 않습니다. 경우에 따라 조건을 몇 단계 깊게 중첩해야 할 수도 있지만 12 년 이상 코딩하면 들여 쓰기가 많은 코드를 몇 번만 작성했다고 정직하게 말할 수 있습니다.
답변
가장 좋은 방법은 추출 방법입니다.
int Step1(int state)
{
if (state == 100)
{
return Step2(state);
}
else
{
return Step3(state);
}
}
int Step2(int state)
{
if (state != 100)
{
throw new InvalidStateException(2, state);
}
// ....
}
답변
가드 조항을 고려할 수 있습니까?
대신에
public void DoSomething(int value){
if (someCondition){
if(someOtherCondition){
if(yetAnotherCondition){
//Finally execute some code
}
}
}
}
하다
public void DoSomething(int value){
if(!(someCondition && someOtherCondition && yetAnotherCondition)){
return;
//Maybe throw exception if all preconditions must be true
}
//All preconditions are safe execute code
}
기회가된다면 Steve McConnell의 Code Complete를 읽어보십시오. 그는이 주제들에 대해 많은 조언을 받았습니다.
http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_sim_b_6
“guard 조항”에 대한 자세한 내용은 https://sourcemaking.com/refactoring/replace-nested-conditional-with-guard-clauses를 참조하십시오.
답변
if
s를 뒤집습니다 .
대신에:
if (foo != null)
{
something;
something;
if (x)
{
something;
}
something;
}
else
{
boohoo;
}
나는 쓸 것이다 :
if (foo == null)
{
boohoo;
return;
}
something;
something;
if (x)
{
something;
}
something;
동일하게 적용 if
– else
블록. 경우 else
적은 중첩 / 짧은, 다음을 되돌립니다.
한 곳에서 매개 변수 값 확인
분석법을 입력하자마자 모든 매개 변수에 잘못된 값이 있는지 확인한 다음 안전하다는 것을 계속 확인하십시오. 더 읽기 쉬운 코드를 만들지 만 나중에 조건부 블록을 쌓고 이러한 검사를 서브 루틴 전체에 분산시키는 것도 절약합니다.
답변
일반적으로 깊이 들여 쓰기 된 코드는 일반적으로 문제가있는 코드라는 것을 알았습니다. 이 문제가 발생하면 뒤로 물러서서 함수가 너무 많은 일을하고 있는지 평가하십시오.
동시에, 당신의 질문에 대답하기 위해, 들여 쓰기가 깊은 곳에서 필요하다면, 당신이 그것을 거기에 두도록 제안 할 것입니다. 그러한 코드에서 들여 쓰기는 매우 긴 코드 일 가능성이 있기 때문에 간단한 이유입니다.
답변
중첩 된 구성 요소 (특히 반복되는 구성 요소)를 별도의 함수로 분리하거나 (언어가 클로저를 지원하는 경우 더 쉽습니다) 일련의 중첩 된 루프를 재귀로 대체합니다.
또한 4 개 대신 2 개의 공백을 들여 쓰기하십시오.
답변
깊은 들여 쓰기를 제거해야 할 범주 적 문제로 보지 않습니다 (리팩토링이 모든 것에 대한 진정한 답이라고 생각하지도 않습니다).
일반적으로 중첩 된 if 대신 논리 문을 작성하고 싶습니다.
if (foo && bar && baz)
오히려
if foo
if bar
if baz