2009-09-15 4 views
1

그래, 제대로 읽으십시오. 마지막으로 나는 JavaScript (함수)에서 인수 검증의 다른 패턴을 보았고 그것들 중 어느 것이 베스트 프랙티스가 될지 궁금해했습니다. 처음에는 두 가지 코드 스 니펫 예제를 보여 드리겠습니다. 첫 번째 문장은 "즉각적인"인수/조건 유효성 검사와 두 번째 것은 "지연된"유효성 검사를 보여줍니다. 각각은 다른 방식으로 다음 코드의 모양에 영향을 미칩니다. 지금까지는 항상 "즉각적인"유효성 확인을 사용했습니다. 그러나 천천히 나는 조건부 블록으로 전체 코드를 강제하는 것이 합리적이라면 의심스러워진다. 당신이 생각하는 것과 "가장 좋은"패턴이 무엇인지 말해주십시오. JavaScript에서 인수 유효성 검사를 수행 할 위치는 어디입니까?

그리고 어떤 변수가 선언 된 장소에 대해

? 몇 번 읽으면, 실제로 사용되기 전에 모든 변수가 메소드의에 선언되어야합니다. 이 올바른지? 변수를 실제로 선언하기 전에 변수를 선언하는 것은 쓸모가 없기 때문에 (아마도 유효하지 않은 인수가 Exception을 던질 수도 있음) 변수/선언 부분을 인수/조건 유효성 검사 부분 이상으로 이동했습니다. 이게 낫겠 니?

감사합니다.

첫 번째 예 :

if ( colorStops.constructor === Array 
    && colorStops.length 
    && colorStops.every(function(c) { 
     return c instanceof ColorStop 
    })) 
{ 
    var privateVar1 = "foo", 
     privateVar2 = "bar", 
     privateVar3 = "tutifrutti"; 

    // here goes the code 
} 
else { 
    throw new TypeError("GradientCanvasFacade: cannot add Colors; " + 
     "invalid arguments received"); 
} 

번째 예 :

의 시작 부분에서 변수를 선언 스크립트 변수 선언 함수가 아닌 대부분의 다른 언어들과 같은 블록 범위 때문에
if (cg instanceof ColorGradient) { 
    throw new TypeError("PresetManager: Cannot add preset; " + 
     "invalid arguments received"); 
} 

var privateVar1 = "foo", 
    privateVar2 = "bar", 
    privateVar3 = "tutifrutti"; 

// here goes the code 
// Here goes the code that get executed when no explicit 
// return took place ==> all preconditions fulfilled 
+0

어느 쪽이든 보인다는 '생성자'를 사용하지 마십시오. 그것은 모든 브라우저에있는 것은 아니며, 그것이 어쩌면 전혀 들리지도 않습니다. 네이티브 JS 객체의 경우 instanceof를 고수하십시오. – bobince

답변

1

, 기능은 많은 의미를 갖습니다.

function someFunc() 
{ 
    if (1==1) 
    { 
     var x = 1; 
    } 
    else 
    { 
     var x = 2; 
    } 
    return x 
} 

지금 시작 부분에 X를 선언이어야 나에게 훨씬 더 복잡한 기능을 상상 감각을 많이합니다. 블록에 일반적으로 바인딩 된 변수 (반복자 변수 또는 컬렉션과 같은)에 대해서는 여전히 블록에서 선언합니다.

내가 이전에 실패 때문이 아니라 정말하지 않기 때문에 확실히, 두 번째 예를 들어 갈 것입니다,하지만 쉽게 때문에 제거하고 구조의 경우 복잡한 파괴하지 않고 검증이 방법을 추가 할 수 있습니다.

0

나는 그것을 읽기 쉽게 간단하기 때문에, 두 번째로 가고 싶어. 또한, 처음으로, 귀하의 기능이 매우 긴 경우, 누군가가 바닥을보고, 그 }가 무엇인지 궁금해하고 볼 수있는 최고의 힙합해야합니다.

또한 변수의 범위 지정도 자바 스크립트가 이상한 범위 지정 규칙이 있음을 잊어 버린 사람을 매우 분명하다.

또한 Martijn이 언급했듯이 두 번째 방법은 다양한 오류를 확인하는 것이 훨씬 쉽습니다. 즉, 각각 자신의 if 문을 가질 수 있습니다.

0
if (some condition) { 
    if (some other condition based in the first) { 
    if (another condition based in 1st and 2nd) { 
     do_job(); 
    } else? 
    } else? 
} else? 

else 블록을 넣을 위치는? 마지막 후 또는 후에?

그것은 절대적으로 더 읽기 두 번째의 choise

관련 문제