주요 면책 조항 : 나는이에 "오른쪽"답이 있다고 생각하지 않는다. 여기에 표현 된 견해는 주관적이고 개인적인 것입니다. 더 많은 것은, 내가 생각하고있는 아이디어는 다른, 에헴, 단점을 가지고 다른 일을 할 경우에만 유용하다는 것입니다 ... 다니엘 얼 위커 (Daniel Earwicker)의 유익한 대답에 따라 시스템을 사용하는 것처럼 말입니다. 이를 염두에두고 :
나는 "예외는 예외"라고 주장합니다. 오류는 덜 예기치 않습니다.
면책 조항 : 다음의 의사 코드는 좋지 않습니다. 그것은 단지 나의 요점을 설명하기 위해 생각할 수있는 최소한의 경우입니다.
참고 :이 생각 실험에서, GetFile은 지정된 파일을 찾을 수없는 경우 UNDEFINED를 반환합니다.
function AlwaysGetFile(name){
var file = null;
if(FileExists(name)){
file = GetFile(name);
if(typeof file === "undefined"){
throw new "couldn't retrieve file" EXCEPTION
}
}
else{
throw new "file does not exist" ERROR
}
return file;
}
소비자가 존재하지 않는 파일 이름으로 GetFileOrThrow를 호출하는 경우 오류가 발생합니다. 내 마음에 구별은 정말 더 높은 수준의 코드 (또는 사용자 입력) 뭔가 잘못하고있다 ...이 함수는이 결과에 대해 무엇을 결정할 수있는 높은 수준의 코드 줄에 오류를 전달해야합니다. 이처럼 고려 ...이 기능은 소모 기능을 말하는 것 :
Look, my friend, I know what's going on here: it is an ERROR to request BobAccounts.xml, so don't do it again! Oh, and if you think you now know what might have gone wrong (having abused me), go ahead and try to recover from it!
지금 몇 가지 이유를 검색하는 데 실패에 대해이 함수는 다음, 이름을 걸리는 파일이 있는지 확인하고있는 경우를 고려한다. 이것은 다른 상황입니다. 정말 예기치 않은 일이 일어났습니다. 게다가, 소비 코드 은을 비난해서는 안됩니다. 이제 우리는 정말이 함수가 소모 기능에하고 싶은 말 :
Oh fiddlesticks! Sorry about this, I humbly beg your pardon but something EXCEPTIONAL that I don't really understand has gone wrong. I don't think that your request for BobAccounts.xml was unreasonable... and I know I should be fulfilling it for you. Since I'm lower level code than you, I really ought to know what's going on... but I don't... and since you've less chance than me of understanding this EXCEPTIONAL situation, I think you'd probably best just stop what you're doing and let this message go all the way to the top... I mean, there is something seriously fishy going on here.
그래서 나는 내 요약이 가정하자 : 실수가 높은 순서 코드에서 발생하는 경우 오류가 발생 (당신이 잘못된 데이터를 통과했다). 실수가 저 순서 코드 (당신이 의존 한 함수가 이해하지 못했고 계획 할 수없는 방식으로 실패한 경우)에서 예외가 발생하면 ... 현재 실수로 함수를 작성하고 있습니다. 글쎄, 이런, 네가 알고 있다면 그걸 고쳐라!
마지막으로 원본 질문에 직접 답하십시오. 오류 및 예외 처리 측면에서 내 조언은 다음과 같습니다. 모든 오류를 정상적으로 처리합니다 (선택적으로 로깅 할 수 있음). 그러나 예외 처리를 신중하게 처리하십시오. 정말로 무엇이 무엇인지 그리고 그것이 일어난 이유를 알고 있다면 EXCEPTION에서 회복하려고 노력하십시오. 그렇지 않으면 거품을 일으키게하십시오 (당신이해야한다면 그것을 다시 던지십시오).
나는 이것을 항상 "예외 처리"라고 불렀지 만, catch 블록을 트리거하면 새로운 오류 ("...")가 발생합니다 ... – Josh
그럼 원하는 것을 던질 수 있습니다. "안녕 엄마!";는 완벽하게 유효합니다. – Pointy
예. 어쩌면 나는 새로운 오류 객체 또는 Error를 상속받은 객체를 던져 버리라는 말을해야 할 것이다. – Josh