반대

3154 단어
이탈리아 XP의 창도자인 Francesco Cirillo는 그의 유명한'if행동 반대'를 위해 사이트를 만들었고 한때 많은 지지자를 끌어들였다.Francesco는 다음과 같이 판단합니다.
if가 가져온 문제는 주로 모듈(방법, 대상, 구성 요소 등) 간의 의존을 구축하고 코드 경로의 지점을 증가시켰다(이것은 코드의 가독성을 떨어뜨린다).
Francesco는 다음과 같은 코드를 예로 들었습니다.
// Bond class
double calculateValue() {
       if(_type == BTP)  { 
        return calculateBTPValue();
       } else if(_type == BOT) { 
                 return calculateBOTValue();    
              } else {
                 return calculateEUBValue();
              }
}

그래픽 if 또는 switch 문을 제거하려면 다음과 같이 멀티태스킹을 사용해야 합니다.
// Bond class
double calculateValue() {
    _bondProfile.calculate();
}
// AbstractBondProfile class
abstract double calculate();

// classe BTPBondProfile >> AbstractBondProfile
double calculate() {
    ...
}
// classe BOTBondProfile >> AbstractBondProfile
double calculate() {
    ...
}
// classe EUBondProfile >> AbstractBondProfile
double calculate() {
    ...
}

Francesco는 이렇게 하는 것이 좋은 점이
새로운 bond 형식을 추가해야 할 때, 이 부분의 독립 논리를 저장하기 위해 새로운 형식을 만들면 됩니다.
추상적인 클래스나 인터페이스를 만드는 것은 개선의 유일한 방법이 아니다. 우리의 목적은 프로그램을 더욱 유연하고 교류하기 쉬우며 테스트하기 쉬우며 수시로 변화를 포옹하는 것이다.
Matteo Vaccari는 "if 작업 반대"에 대해 다음과 같은 몇 가지 방법을 추가했습니다.
 
수정 전
수정 후
볼 연산 결과를 직접 사용
if (foo) {
  if (bar) {
    return true;
  }
}
if (baz) {
  return true;
} else {
  return false;
}
return (foo && bar || baz); 

보조 함수 사용
if (x > y)
  return x;
return y;
return max(x, y);

유연성 0의 역할
int arraySum(int[] array) {
  if (array.length == 0) {
    return 0;
  }
  int sum = array[0];
  for (int i=1; i < array.length; i++) {
    sum += array[i];
  }
  return sum;
}
int arraySum(int[] array) {
  int sum = 0;
  for (int i=0; i < array.length; i++) {
    sum += array[i];
  }
  return sum;
}

그러나 지역사회에서도 이에 대해 다른 견해가 나오고 있다.
오, 여기 문제가 하나 발견됐어요.존경하는 고객님, 전 컨설턴트가 "if"문구를 사용했습니다. 이 함수를 80개의 새로운 종류로 바꾸면 더욱 민첩해 보입니다.
Don't Repeat Yourself가 더 날렵해 보입니다.더 좋은 방법은 세 번째 중복 코드가 나올 때까지 기다렸다가 재구성하는 것이다. (하지만 너무 오래 기다리지 마라.)이렇게 하면 상관없는 코드를 많이 피할 수 있고 프로그래머에게 더욱 유연한 선택 여지를 줄 수 있다.
'if행동 반대'를 위한 보충도 있다.
이 행동은'모든if 코드 삭제'가 아니라 유형 판단 논리를 다중으로 교체하는 것이라고 생각합니다.그것을 '반대 유형 필드 행동' 이라고 부르는 것이 더 적합할 것이다.
'if행동 반대'도'if-free'의 코드 예시를 모집하고 있습니다. 거기서 코드 단편을 제출할 수 있습니다.사실 국내 지역사회에서도 번거로운if문장을 없애는 사례가 적지 않다. 예를 들어 다음과 같다.
4
  • Jeffrey Zhao는 간단한 라이브러리를 작성했습니다.NET의 열거 유형은 데이터를 통일적으로 얻거나 연산할 수 있도록 정보를 휴대할 수 있다

  • 4
  • 나무 여우는 State 모드를 사용하여 서로 다른 상태에서 웹 인터페이스에서 해당 구성 요소의 스타일 전환 방식을 간소화했다

  • 4
  • Tristan G는 유창한 API를 설계하여 개발자가 실체 검증 규칙을 편리하게 작성할 수 있도록 했다

  • 당신도 이 방면에 독특한 경험을 가지고 있습니까?함께 나눠보는 것도 좋을 것 같아요.

    좋은 웹페이지 즐겨찾기