이 질문이
마법의 숫자를 제거
하는 것과 같은 적절한 용도에 관한 것이 아니라는 것이 끔찍한 어리석은 어리석은 일관성에 관한 것입니다 . 이 답변은 무엇을 다루고 있습니까?
상식은 시스템에 유지 관리 및 복잡성 외에 아무것도 추가 const char UPPER_CASE_A = 'A';
하거나 알려주지 const char A = 'A'
않습니다. const char STATUS_CODE.ARRIVED = 'A'
다른 경우입니다.
상수 는 런타임에 변경할 수없는 것을 나타내지 만 나중에 컴파일 타임에 수정해야 할 수도 있습니다. 언제가 const char A =
아닌 다른 것이 올바르게 A
됩니까?
당신이 보는 경우 public static final char COLON = ':'
자바 코드에서, 그것을 쓴 사람 누구에게나 찾아 자신의 키보드를 휴식. 당신의 표현이 COLON
계속 바뀌면 :
유지 보수의 악몽이 생길 것입니다.
난처:
누군가가 그것을 COLON = '-'
사용하는 -
곳 이 대신 어디에나 필요 하기 때문에 그것을 바꾸면 어떻게됩니까 ? 기본적으로 assertThat(':' == COLON)
모든 단일 const
참조에 대해 변경되지 않는지 확인 하는 단위 테스트를 작성 하시겠습니까? 시험을 변경할 때 누군가 가 시험을 고치 도록 하기 위해서만 ?
누군가가 실제로 public static final String EMPTY_STRING = "";
유용하고 유익 하다고 주장한다면 , 당신은 그들의 지식을 인정하고 다른 모든 것에서 안전하게 무시합니다.
이름이 지정된 버전으로 모든 인쇄 가능한 문자를 사용할 수 있다는 것은 누가 그것을했는지에 상관없이 감독되지 않은 코드를 작성할 자격이 없음을 보여줍니다.
응집력:
또한 인공적으로 응집력을 떨어 뜨립니다. 왜냐하면 그것들은 그것을 사용하고 관련있는 것들로부터 멀어지기 때문입니다.
컴퓨터 프로그래밍에서, 응집력은 모듈의 요소들이 서로 속하는 정도를 의미합니다. 따라서 응집성은 주어진 모듈 내의 기능들 간의 관계 강도를 측정합니다. 예를 들어, 응집력이 높은 시스템에서 기능은 밀접한 관련이 있습니다.
커플 링:
또한 많은 관련없는 클래스를 결합합니다. 모두 실제로 수행하는 것과 관련이없는 파일을 참조하기 때문입니다.
긴밀한 결합은 클래스 그룹이 서로에 크게 의존하는 경우입니다. 이 시나리오는 수업이 너무 많은 책임을 맡거나 하나의 관심사가 자체 수업이 아닌 많은 수업에 퍼져있을 때 발생합니다.
당신이 사용하는 경우 더 좋은 이름을 같은 DELIMITER = ','
이름이 일반적이며, 어떤 의미를 전달하지 않기 때문에 당신은 여전히 같은 문제가있다. 값을 다시 할당해도 리터럴을 검색하고 바꾸는 것보다 영향 분석을 수행하는 데 도움이되지 않습니다 ','
. 어떤 코드가 그것을 사용하고 ,
다른 코드가 필요하지만 ;
지금 필요 하기 때문에? 여전히 모든 사용을 수동으로보고 변경해야합니다.
야생에서:
최근 1,000,000+ LOC
에 18 세였던 애플리케이션을 리팩터링했습니다 . 그것은 같은 것들을 가졌습니다 public static final COMMA = SPACE + "," + SPACE;
. " , "
필요한 곳을 단순히 인라인 하는 것 보다 낫지 는 않습니다.
가독성 을 주장 하려면 whitespace
문자를 볼 수있는 곳에 문자 를 표시하도록 IDE를 구성하는 방법을 배워야합니다 . 이는 시스템에 엔트로피를 도입하는 매우 게으른 이유입니다.
또한 여러 패키지와 클래스에서 ,
단어의 철자가 틀리면서 여러 번 정의 COMMA
되었습니다. 코드에서 모든 변형에 대한 참조가 혼합되어 있습니다. 완전히 무관 한 것을 깨뜨리지 않고 무언가 를 시도하고 고치는 것은 악몽 일뿐입니다.
알파벳과 같은 여러가 있었다 UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
대부분의 시간에 동일한 있다고 A
하지만, 어떤 경우에는하지 않았다 . 거의 모든 캐릭터에 해당하지만 모든 캐릭터에 적용되는 것은 아닙니다.
그리고 편집 기록에서 18 년 동안이 중 하나가 편집되거나 변경된 것으로 보이지 않았습니다. 이제 분명한 이유는 추적 할 수없는 너무 많은 것들을 깨뜨릴 수 있기 때문에 새로운 변수가 있습니다. 같은 이유로 변경 될 수없는 같은 것을 가리키는 이름.
이 관행이 아무 것도하지 않고 최대 엔트로피에서 시작한다고 주장 할 수는 없습니다.
나는이 모든 혼란을 리팩토링하고 모든 긴장을 인라인했으며 새로운 대학 채용은이 const
참조가 실제로 지적한 여러 수준의 간접적 인 길을 찾아 낼 필요가 없었기 때문에 훨씬 생산적 이었습니다. 그들이 무엇을 포함했는지.