NotImplementedException 사용


15

NotImplementedException아직 작성하지 않은 코드 를 던지는 것은 나쁜 습관으로 간주 됩니까? TODO 의견이 더 안전한 것으로 간주 될 수 있습니까?


6
그러한 예외를 사용하면 어떤 단점이 있습니까?
SRKX

@SRKX 프로덕션 코드에 예외가 발생하여 전체 코드 블록이 작동하지 않을 위험이 있습니다. (아직 나에게 일어나지 않았지만 우리 모두 쉬는 날이있다) 나는 개인적으로 사용한다. 나는 몇 가지 단점을 간과 할 수 있을까 걱정했다.
Tom Squires

이상하게도 사용중인 언어를 지정하는 태그는 없습니다. C에는 예외가 없으므로 모든 공용 언어에 적용되는 것은 아닙니다. 여기에 언어 태그를위한 공간이 있습니다.
David Thornley

1
@DavidThornley, 질문은 원래 C #으로 태그되었으므로 태그를 읽었습니다.
svick

@ svick : C # 일 가능성이 있다고 생각했습니다. 태그를 추가해 주셔서 감사합니다.
David Thornley

답변:


34

나는 NotImplementedException실제로 좋은 습관 이라고 생각 합니다.

실제로 메소드 구현을 잊어 버리고 나중에 프로젝트에서 메소드를 사용하면 (그리고 그것이 발생한다고 생각하면), 단계별로 잘못 된 것을 찾는 데 오랜 시간을 소비 할 수 있습니다. 예외가있는 경우 프로그램에서 직접 중지하고 예외를 프롬프트합니다 (예외를 발견하면 포착 한 예외를 찾아서 신속하게 찾을 수 있습니다).

GUI 도움말 (VS의 작업)과 프로그램 안전을 결합하는 방식으로 TODO 주석 NotImplementedException 함께 사용하는 것이 좋습니다 .

릴리스 버전의 경우 대부분의 경우 프로그램이 올바르게 작동하지만 잘못된 결과를 생성하는 대신 프로그램이 충돌하는 것을 선호 하므로 내 의견으로 훨씬 더 중요 합니다.


6
Resharper를 사용하면 NotImplementedExceptionTODO 주석과 같은 방식으로 s가 표시 됩니다. 좋은 기능이라고 생각합니다.
svick

1
좋은 TDD 연습을하시면 승자가됩니다
LRE

7

오류 및 오류 처리에 대한 일반적인 철학에 따라 다릅니다. 나는 "하드 오류"유형의 사람이다 : 나는 무언가 잘못되었을 수도 있다는 것을 조금이라도 암시한다. 나는 모든 것을 주장 할 것이다. 오류가있는 경우 무언가있을 것으로 예상되고 존재하지 않거나없는 경우 전체 우주가 중지되어야합니다. 윈도우 느낌표가 라우드 스피커를 통해 불길하게 울려 야합니다.

오히려 오류로 귀찮게하지 않을 다른 사람들이 있습니다. 따라서 클라이언트에 제공하고 코드 모듈을 잊어 버렸기 때문에 전체 보고서 모듈이 누락 된 경우 응용 프로그램이 너무 조용해서 테스트를 수행 한 사람이 아무도 없었다면 어떻게해야합니까? 고객의 얼굴에 예외를 던지는 것보다 아무것도하지 않는 것이 좋습니다!


마치 디버그 및 릴리스에서 다른 동작을 원하는 것처럼 어설 션이 항상 자르지는 않습니다. 릴리스에서 .Net Code Contracts를 끌 수 있다고 생각합니다.
직업

1
나는 주로 어설 션을 사용하며 릴리스에서도 해제됩니다. 디버그에서 중단 점에 도달하거나 테스트 할 때 예외가 발생하거나 릴리스시 컴파일되지 않는 자체 어설 션 기능이 있습니다.
Mike Nakis

3

좋은 생각이라고합니다. 일반적으로 폼이나 다이어그램 또는 다른 것에서 자동 생성되는 스켈레톤 코드에서 발생하는 예외를 봅니다. 예외는 코드 구현을 상기 시키며 설정되었지만 완전히 구현되지 않은 기능을 사용하려고하면 오류가 발생하는지 확인합니다. 때때로 나는 그것을 멈추거나 실행을 중단시킬 가능성이 적은 것 (예 : 콘솔에 경고를 인쇄하는 것)으로 대체 할 것이지만 그것이 나에게 효과적이라는 것을 알았습니다.

다른 사람들 이이 예외를 사용하는 라이브러리를 작성하는 경우 대안보다 낫습니다. 라이브러리 사용자는 함수를 호출하고 왜 아무것도 일어나지 않는지 궁금합니다. 물론, 배송 된 라이브러리에서이 예외가 발생하는 것은 여전히 ​​좋지 않지만 IMO (자동 오류)보다 낫습니다.


1

좋은 습관이라고 생각합니다. 대안은 유효하지 않은 값 또는 상태를 전파하는 것인데, 이는 테스트 코드와 프로덕션 코드 모두에 영향을 미칩니다.


1
잠깐만 .... 당신이 일하는 곳에서 NotImpl을 던지는 코드는 QA에 이르기까지 모든 것을 만들 것입니까? 생산조차도?
Steven Evers

3
아니요, 반대의 경우 : NotImpl은 훌륭한 붉은 깃발 / 오류 상태입니다. 그러나 TODO는 시맨틱 한 가치가 없으며 테스트 또는 프로덕션으로 만들 수있어 조용히 문제를 해결할 수 있습니다. (제작에서 TODO를 제거하는 정책을 상상할 수는 있지만 그러한 규칙은 없습니다.)
Larry OBrien

1

나는 항상 사용합니다 NotImplementedException-결국 그것이 목적입니다.

이는 "실패"개념과 관련이 있습니다. 코드에서 예외가 발생하면 프로덕션으로 이동하기 전에 예외가 발생합니다. 그것이 생산에 도달하면 적어도 클라이언트는 어셈블리가 잘못되었음을 알고 있습니다.

코드가 의미없는 값을 반환하거나 void메서드의 경우 아무런 조치도 취하지 않으면 코드 소비자는 호출이 그렇지 않을 때 의미가 있다고 생각할 수 있습니다. 그런 다음 나중에 올바른 코드를 얻으면 이전의 잘못된 동작에 따라 코드가 손상 될 수 있습니다.


0

이것은 어떤 종류의 프로젝트입니까? 직장이나 집? 집에서 원하는 작업을 수행하십시오. 가장 좋은 것은 작업중인 작업을 모두 완료해야한다는 것을 상기시켜줍니다.

직장에서 작성을 마칩니다.

다른 개발자, QA 또는 빌드를 중단시킬 수있는 코드를 체크인하는 상황을 볼 수 없습니다.


둘 다, 나는 집에서도 좋은 습관을 고수하려고 노력합니다.
Tom Squires

0

나는 doxygene autodocing에서 \ todo를 수행하고 예외를 던진다. 그렇게하면 사람들이 적어도 RTFM에 귀찮게 할 수 없다면 논리 값을 반환하지 않는 선언 된 함수가 왜 있는지 궁금해하는 대신 프로그램이 충돌 한 이유를 알아낼 수있을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.