2012-04-25 2 views
13

Javascript 속기 패턴을 보면서 시간을 보내고있는 동안 if 진술 here을 표현하는 흥미로운 방법을 발견했습니다. 다음 작품 :'&&'를 if 문으로 사용 하시겠습니까?

​var var1 = 5; 
var var2 = 1; 

var1 == 5 && var2++; 

그게 하나 개의 작업을 수행해야하는 if 문을 작성 완전히 쿨 (짧은, 청소기) 방식으로 생각합니다. 나는 그것으로 뭔가 다른 시도하지만, 나는 바로 다음 코드의 문제로 실행 :

Uncaught ReferenceError: Invalid left-hand side in assignment

:

​var var1 = 5; 
var var2 = 1; 

var1 == 5 && var2 = 2; 

대신의 첫 번째 코드처럼 작동을 내 테스트에서 오류가 발생합니다 왜이 방법이 효과가 없으며 내 문장의 왼편이 오른손과 반대되는 것으로 잘못 표시되는 이유는 무엇입니까? && 운영자가 = 운영자보다 더 높은 우선 순위를 가지고 있기 때문에

+7

이것은 아니다 "(청소기, 짧은) 완전히 멋진"방법은'경우 쓰기 '. 그것은 더 깔끔하지 않고, 훨씬 더 읽기 쉽고 유지 보수가 불가능합니다 (당신은 실제로이 질문을해야만 자신이 증명했습니다). –

+0

이것이 무엇을 의미하는지 알면 깨끗하게 보입니다 (imho). 3 줄 짜기보다 짧습니다. 나는 여전히 멍청한 녀석이기 때문에이 질문을해야만했다.게다가 그것은 정말 멋지다. 당신은 그것을 주장 할 수 없다. :) –

+0

내가 말했듯이, 그렇지 않습니다. 3 줄 미만으로'if'를 쓸 수 있으며, 여전히 읽을 수 있습니다. 나는 네가 멍청하다고 말할 수있다. 왜냐하면 네가 낫다고 생각하기 때문이다. :) 경험 많은 사람들은 유지 보수가 가능하고 읽을 수있는 코드가 "멋지지만 이해하기 어렵다"는 것보다 낫다는 것을 알 것입니다. –

답변

23

이 작동하지 않습니다. 즉, 코드는 다음과 같이 해석됩니다.

(var1 == 5 && var2) = 2; 

할당 주위에 수동으로 괄호를 넣으면 올바르게 해석됩니다. 특히이 idiom--에 익숙하지 않은 사람들을 위해, 사실이다 -

var1 == 5 && (var2 = 2); 

다른 사람들은 코드의 의도 열심히 읽어을 만들기 때문에 그 나쁜 생각 말하고, 같은 코드를 작성하는 당신을 견책합니다 그러나 그것을 시험해보고 이와 같은 것들을 실험 해보고 스스로 일어나는 일을 보는 것이 중요합니다. 이 접근법에 대해 귀찮은 것을 이미 접했습니다.

어쨌든,이 같은 경우에, 나는 개인적으로 난 당신이 수동으로 괄호를 추가해야하기 때문에 반드시 다른 사람이 그 나쁜 스타일의 당신을 말할 것이다 해요하지만이

if(condition) statement; 

처럼, 한 줄을 if 문을 사용하는 것을 선호 당신이 더 많은 진술을 필요로 할 때, 이것은 정말로 나를 괴롭히지 않습니다. 당신이 말했듯이 간단한 조건을 위해서 3 개의 선을 사용하는 것보다 훨씬 깨끗합니다.

+0

아주 멋진, 내 주요 질문에 대한 답변. 하지만 저는 또 다른 이유가 있습니다 : 왜 '(var1 == 5 && var2)'가 문 왼쪽에 잘못 표시 되었습니까? 'if (var1 == 5 && var2! = undefined)'라고 말하는 것과 같은 것이 아닌가? 그것은 작동해야하며 오른손이 대신 호출됩니다. –

+1

@ElliotBonneville'(var1 == 5 && var2)'는 할당에서 유효한 왼쪽 편칭이 아니기 때문에 오류가 발생합니다. 왼손잡이쪽에 '2'가 배정 될 것 같지 않은가? –

+0

오오, 맞습니다. 이 문제를 해결해 주셔서 감사합니다! 받아 들여 ... 8 분. –

1

오른쪽에 잘못된 연산자를 사용하고 있기 때문입니다. 전체 문장을 단일 변수로 읽으려고합니다.

11

브레인든 에이치 (JavaScript 작성자)는 우리에게이 유형의 사용이 " 이 논리 연산자는 이와 같은 코드를 실행하는 것이 아니라 표현식의 값을 결정하기위한 것이기 때문에 언어의 "abusage"를 사용합니다.

말했다되고 그건

"I also agree...that the && line is an abusage, allowed due to JS’s C heritage by way of Java, but frowned upon by most JS hackers; and that an if statement would be much better style..." http://brendaneich.com/2012/04/the-infernal-semicolon/

, 당신이 당신의 문 포장하여 연산자 우선 순위 문제를 방지 할 수 있습니다

(var1 == 5) && (var2 = 2) 
+4

"abusage"에 대한 메모는 +1입니다. 정확히 그게 무엇입니까. –

+0

링크를 제공해 주셔서 감사합니다! –

관련 문제