JavaScript 실패를 나타내는 안티 - 침묵하는 기술
-
16-09-2020 - |
문제
NULL에 의존하는 대신에 JavaScript에서 오류를보고하는 것이 좋습니다. 오류가 발생할 때 정의되지 않고 함수가 앞으로 진행할 수 없습니다. 나는 세 가지 접근법을 생각할 수 있습니다 :
- 아무것도하지 않습니다
- 예외를 던지십시오
- Assert
여기에 전달 된 양이있는 사용자 계정을 크레딧 한 함수입니다. credit
함수는 Account
객체의 일부입니다.
여기에 순진한 해결책이 있습니다.
function credit(amount) {
this.balance += amount;
}
.
이 접근법의 주요 문제는 유효하지 않은 데이터입니다. 수정하고 반환 값을 사용하여 작업이 실패했음을 나타냅니다.
function credit(amount) {
if(!isInt(amount)) {
return false;
}
this.balance += amount;
}
.
이것은 이전 하나의 개선이지만 클라이언트 코드는 작업이 성공했는지 확인하기 위해 리턴 값을 확인해야합니다. 기본적으로 시스템의 모든 메소드가 번거로울 수 있습니다.
if(!johnDoe.credit(100)) {
// do some error handling here
}
.
두 번째와 비슷한 세 번째 접근법은 예외를 던지는 것입니다. 우리가 예외를 던지고 있기 때문에 일반적인 것보다는 특정 유형의 예외를 던질 수 있습니다.
function credit(amount) {
if(!isInt(amount)) {
throw new InvalidAmountError(amount);
}
this.balance += amount;
}
.
던지기 예외와 유사한 네 번째 접근법은 코드의 어설 션을 사용하는 것입니다. 위의 접근법과 비교 된 한 가지 단점은 주장이 일반적이기 때문에 사용자 정의 예외를 던질 수있는 기능을 잃게됩니다. 객체를 전달하여 각 어설 션 호출에 던져줌으로써 가능합니다.
function credit(amount) {
assert(!isInt(amount), "Amount to credit is not an integer");
this.balance += amount;
}
.
전역 assert
기능은 쓸수록 쉽게 코드를 조금 더 짧게 만듭니다.
function assert(value, message) {
if(value !== true) {
throw new AssertionError(message);
}
}
function AssertionError(message) {
this.message = message;
}
AssertionError.prototype.toString = function() {
return 'AssertionError: ' + this.message;
}
.
이러한 접근 방식에서는 예기치 않은 값과 불행한 경로를 다루는 좋은 방법이 될 것입니다. 여기에 언급되지 않은 다른 접근 방식이 유용 할 수 있습니까?
해결책
log4js 와 같은 오류를보고하도록 클라이언트 측 로깅 프레임 워크를 고려하십시오.하나는 응용 프로그램에 따라 Ajax를 통해 서버에 메시지 (즉, 정보, 디버그, 경고, 오류)를 로그인하거나 서버에 지속시킬 수 있습니다.
log4js 사이트는 다른 JavaScript 로깅 프레임 워크의 목록을 제공합니다.
사용자 정의 예외 예제를 사용하여 좋은 접근 방식은 예외를 던지고 적합 할 때 오류를 기록하는 것입니다.
다른 팁
위에 비교 한 한 가지 단점 접근법은 주장이 이래로 일반적인, 우리는 던질 수있는 능력을 잃는다 사용자 정의 예외
반드시 :
function assert(value,message,Exctype) {
if(value !== true) throw new Exctype(message);
}
.
생성자는 기능입니다.함수는 첫 번째 클래스 값입니다.주위에 자유롭게 지나가십시오.