2012-10-24 4 views
3

일부 값의 길이를 검사하는 변수가 있습니다. 하나가 실패하면 var passfalse으로 설정됩니다. 또 다른 함수는 전자 메일 주소의 유효성을 검사하고 테스트를 통과하지 못하면 false로 설정합니다. 사용자 정의 오류 메시지를 작성하려고합니다.여기에 삼항 연산자를 사용하는 것이 적절합니까?

이와 같은 삼항 연산자 또는 중첩 된 if 문을 사용하는 것이 더 좋습니까? 아니면 훨씬 간단한 방법이 있습니까?

var mail = true; 
var pass = true; 
var err = ''; 

(mail && pass) ? err = 'mail and pass both true' : (!mail && pass) ? err = 'not mail and is pass' : (mail && !pass) ? err = 'is mail and not pass' : err = 'neither pass nor mail'; 

fiddle

+0

왜 그걸 쓰는 것이 좋을까요? 표준 if 문을 사용합니까? –

+2

나는'if's와 같이 갈 것입니다. 작은 표현이라 할지라도 3 진수는 꽤 읽을 수 없으며, 여러 개의 중첩 된 3 진수는 빠르게 광기로 내려갑니다. – lanzz

+2

나중에 참조 할 수 있도록 삼항 연산자는 표현식이 아니라 표현식을 포함해야합니다. 'err ='을 배제하고'err = cond? '문자열 1': (... 삼항 연산자의 혼란 ...)'. 비록 내가 모두가 여기서 암시하는 것에 동의한다. 'if'를 사용하십시오. –

답변

3

당신이로 실행할 수있는 유일한 구문 문제는 삼항 연산자의 연관성 경우

7

는 "더 나은"은 본질적으로 가치 판단이며, 그래서 그것은 당신에게 달려 있습니다. 터너 리 버전을보고 if/else 버전을보고 더 읽기 쉽고 유지 보수가 잘되며 명확한 버전을 결정하십시오. 그것이 당신이 선택해야하는 것입니다. 컴파일러는 중요하지 않습니다. 결국 컴파일러는 아무리 효율적으로 작업을 수행하게 될 것입니다. 다른 \이 ...

+0

그리고 나는 그것이 어느 것이 될 것인지를 안다. –

+0

@JamesMcLaughlin : 네, 그렇습니다.하지만 증인을 이끌고 싶지 않았습니다. :) –

+0

@JamesMcLaughlin 어느 것이 될 것입니까?! – 1252748

1

그냥 코드의 명확성을 위해 내가 사용할 수 있습니다. 모호성을 줄이기 위해 괄호를 사용하면 도움이됩니다.

주요 문제는 그 라인이 인간에 의해 간신히 읽을 수 있다는 것입니다. 중첩 된 if는 읽기 쉽고 유지 보수가 쉽습니다. 2 개월 후에 그 라인으로 돌아와 그것을 해독하려한다고 상상해보십시오.

0

기존 답변에는 이미 좋은 생각이 있습니다. 물론

var mail = true; 
var pass = true; 
var err = ''; 

err = (mail && pass) ? 'mail and pass both true' 
    : (!mail && pass) ? 'not mail and is pass' 
    : (mail && !pass) ? 'is mail and not pass' 
    :      'neither pass nor mail'; 

:

http://jsfiddle.net/Shedal/4SfTj/1/

var statusStrings = { 
    true: { 
     true: 'mail and pass both true', 
     false: 'is mail and not pass' 
    }, 
    false: { 
     true: 'not mail and is pass', 
     false: 'neither pass nor mail' 
    } 
} 

var mail = true; 
var pass = true; 
var err = statusStrings[mail][pass]; 

document.write(err); 
+0

이것은 객체 표기법입니다. 'var a = {b : 'c'}'를 가지고 있다면'a [ 'b']'를 사용하여'b'의 값을 읽고 쓸 수 있습니다. 'a.b'와 같습니다. –

+0

그 사실을 몰랐습니다. 고맙습니다. – 1252748

1

당신이이 조회 테이블처럼 조금 보이는 사용할 수있는 좋은 관용구가있다 : 그냥 포괄 성 '을 위해, 여기에 선언적 솔루션입니다 , 모두 주관적으로 더 나아졌지만 이것은 유일한 액션이 단일 변수에 할당되는 경우 일련의 if 문을 대체하는 좋은 방법 일 수 있습니다.

말하자면, 3 선의 시각적 간결함을 결합하는 동시에 3 선 3 선의 타고난 판독 불가능 성을 해결합니다. 단점이라면 나중에 코드가 부울에 따라 표현식을 선택하는 것보다 더 많은 일을해야한다면 if-else 문으로 리팩토링해야합니다 ...

관련 문제