반드시 나쁘지는 않습니다. 기본 클래스의 메소드는 종종 서브 클래스에 대한 대체 지점을 의미하는 빈 메소드를 호출합니다. 예 : Cocoa Touch의 UIView에는 -didAddSubview:
기본 버전에서 아무것도하지 않는 것으로 문서화 된 방법이 있습니다. 서브 클래스가 무언가를 수행하기 위해 구현할 수 있기 때문에 UIView의 -addSubview:
메소드는 -didAddSubview:
아무것도 수행하지 않아도 호출 해야합니다. 물론 아무 것도하지 않는 방법과 그 이유를 문서화해야합니다.
비어 있거나 쓸모없는 기능 / 방법이 역사적 이유로 분명히 존재하는 경우 제외해야합니다. 확실하지 않은 경우 소스 코드 저장소에서 이전 버전의 코드를 살펴보십시오.
- 중복 검사는 별도의 클래스 파일, 객체 또는 메서드에서 수행됩니다.
문맥이 없으면 괜찮다면 말하기가 어렵습니다. 동일한 이유로 점검이 명확하게 수행 된 경우, 책임이 명확하게 분리되지 않았으며, 특히 두 점검 모두 동일한 조치가 수행 될 때 일부 리팩토링이 필요함을 의미 할 수 있습니다. 두 점검으로 인한 조치가 동일하지 않은 경우, 조건이 동일하더라도 두 가지 점검이 다른 이유로 수행되고있을 가능성이 높습니다.
다음과 같은 큰 차이가 있습니다.
if (1) {
// ...
}
과:
if (foo() == true) {
// ...
}
어디 foo()
에서 항상 반환 true
됩니다.
첫 번째 경우는 사람들이 디버깅 할 때 많이 발생합니다. 그것은 사용하기 쉬운 if (0) {...
(가) 변경 후 버그를 분리하려고 노력하는 동안 일시적으로 코드의 덩어리를 제거하고, 0
에 1
그 코드를 복원 할 수 있습니다. 는 if
당신은 물론, 완료되면 제거해야하지만, 그 단계를 잊지하거나 여러 장소에서 일을 한 경우 하나 또는 두 개의를 그리워 쉽습니다. (나중에 검색 할 수있는 주석으로 이러한 조건을 식별하는 것이 좋습니다.) 유일한 해는 미래에 발생할 수있는 혼란입니다. 컴파일러가 컴파일 타임에 조건의 값을 결정할 수 있으면 완전히 제거합니다.
두 번째 경우도 가능합니다. foo()
코드로 표현 된 조건을 코드의 여러 곳에서 테스트해야하는 경우, foo()
항상 현재 상황이 발생 하더라도 별도의 함수 나 메소드로 분해하는 것이 올바른 방법 인 경우가 많습니다 . foo()
결국 return을 생각할 수 있다면 false
메소드 또는 함수에서 해당 조건을 분리하는 것이 코드가 해당 조건에 의존하는 모든 위치를 식별하는 한 가지 방법입니다. 그러나 이렇게하면 foo() == false
조건이 테스트되지 않고 나중에 문제를 일으킬 수 있는 위험이 있습니다 . 해결책은 false
케이스 를 명시 적으로 테스트하는 단위 테스트를 추가하는 것 입니다.
이것은 역사의 인공물처럼 들리며 코드 검토 중이나 소프트웨어의 주기적 프로파일 링을 통해 식별 할 수있는 것 같습니다. 의도적으로 만들 수 있다고 생각 하지만 누군가가 실제로 의도적으로 그렇게 할 것이라고 상상하기가 어렵습니다.
if (false) {...}
블록은 코드 주석 처리에 좋습니다! </ sarcasm>