뒤로 물러서서 값 배열의 산술 평균을 계산하는 다른 예제를 사용하십시오.
입력 배열이 비어 있거나 호출자 인 경우 호출자의 요청을 합리적으로 이행 할 수 있습니까? 아니요. 옵션은 무엇입니까? 글쎄, 당신은 할 수 있습니다 :
- 오류를 제시 / 반환 / 투시합니다. 해당 오류 클래스에 대한 코드베이스의 규칙 사용
- 0과 같은 값이 반환 될 것이라고 문서화
- 지정된 유효하지 않은 값이 반환 될 것임을 문서화합니다 (예 : NaN)
- 매직 값이 반환 될 것임을 문서화하십시오 (예 : 유형에 대한 최소 또는 최대 또는 희망적으로 표시하는 값)
- 결과가 지정되지 않았다고 선언
- 액션이 정의되지 않았다고 선언
- 기타
그들이 당신에게 잘못된 입력을 주었고 요청을 완료 할 수 없다면 오류를 낸다고 말합니다. 나는 프로그램의 요구 사항을 이해하기 위해 첫날부터 어려운 오류를 의미합니다. 결국, 함수가 응답 할 위치에 있지 않습니다. 작업 이 실패 할 수있는 경우 (예 : 파일 복사) API에서 처리 할 수있는 오류를 제공해야합니다.
따라서 라이브러리가 잘못된 요청 및 실패 할 수있는 요청을 처리하는 방법을 정의 할 수 있습니다.
코드가 이러한 클래스의 오류를 처리하는 방식에서 일관성을 유지하는 것이 매우 중요합니다.
다음 범주는 라이브러리가 넌센스 요청을 처리하는 방법을 결정하는 것입니다. 귀하의 것과 유사한 예제로 돌아 가기-파일이 경로에 존재하는지 여부를 결정하는 함수를 사용하십시오 : bool FileExistsAtPath(String)
. 클라이언트가 빈 문자열을 전달하면이 시나리오를 어떻게 처리합니까? 빈 배열이나 null 배열은 어떻게 전달 void SaveDocuments(Array<Document>)
됩니까? 라이브러리 / 코드베이스를 결정하고 일관성을 유지하십시오.. 이러한 경우 오류를 고려하고 클라이언트가 넌센스 요청을 오류로 표시하여 어설 션을 통해 금지합니다. 어떤 사람들은 그 아이디어 / 행동에 강하게 저항 할 것입니다. 이 오류 감지가 매우 유용합니다. 프로그램에서 문제를 찾는 데 매우 유용합니다. 문제를 일으키는 프로그램의 위치가 양호합니다. 프로그램은 훨씬 명확하고 정확하며 (코드베이스의 발전을 고려) 아무 것도하지 않는 함수 내에서 사이클을 태우지 않습니다. 이 방법으로 코드가 더 작고 깨끗해지며 일반적으로 확인이 문제가 발생할 수있는 위치로 푸시됩니다.