2010-07-13 6 views
13

가능한 중복 :
Why avoid increment (“++”) and decrement (“--”) operators in JavaScript?왜 우리는 자바 스크립트에서 ++를 사용하지 않아야합니까?

나는 ++ & 사용하지 않는 것이 좋습니다 몇 군데에 들었습니다 - 자바 스크립트, 그리고 우리가 사용되어야 + = 1 또는 - = 1 대신. 누가 나를 위해 이유를 명확히 할 수 있습니까?

+4

그들은 같은 것으로 해석됩니다. 이거 어디서 들었습니까? –

+2

JSLint는 Jason에게 불만을 제기합니다. – tbranyen

+2

Crockford, 거의 확실합니다. –

답변

36

더글러스 크록 포드가하거나하지 않을 수있는 방법을 혼란 뭔가 자신 만의 의견을 가지고 있기 때문에. JSLint는 자신의 의견을 예상하고 있습니다.

+0

OK, 그 의미가 있으며, 여기에서도 합의가 된 것 같습니다. 그래서 ++를 계속 사용하겠습니다. Javascript에는 몇 가지 일을하는 이상한 방법이 있습니다. 권장 사항이 개인적인 것이 든 실적 기반의 것이 언제인지를 말하기는 어렵습니다. –

+1

나는 좋은 부분이 꽤 마음에 들었지만 단항 증가 및 감소를 나쁜 부분으로 선언하는 그의 이론적 근거에 매우 실망했다. 물론, 그들은 슬픈/마조히즘적인 루프를위한 부분과 같은 방식으로 사용될 수 있습니다. 그러나 그것은 많은 언어 기능에 적용됩니다. 미친 예를 만드는 데 충분한 시간을 할애한다면 모두에게 적용될 수 있습니다. –

+1

Sigh. 크로포드 (Crockford)는 대답하기에 * 많은 * 점을 가지고 있습니다. 사람들이 복음으로 그토록 많은 의견을 많이 듣지 않았 으면 좋겠다. ... – annakata

2

제가 생각할 수있는 유일한 좋은 이유는 명확합니다. 당신은 다음과 같은 상황에 대해 걱정할 필요가 없습니다 :

var result = ++i; 

또는를 :

var result = i++; 
+6

이해하지 못하는 것을 사용하지 마십시오. 당신이 이해하는 것을 사용하십시오! 델파이의'와'와 지난 몇 주 동안 우리가 논한 다른 모든 것들에 대해서도 똑같은 것이 적용된다.) –

+0

@ 앙드레아스, 그런 것들은 좋지만, 실제로 얼마나 많은 전문가들이 모든 추상화 계층을 살펴보고 양자 물리에서 GUI에 이르는 시스템을 이해하는 법을 배울 수 있습니까? 나는 모든 사람들이 자신이 일하는 추상화 계층의 운영 모델에 대한 세부 사항을 배우려고 노력해야한다고 생각한다. 일반적으로 추상화 계층의 작동 모델의 모든 세부 사항을 진정으로 이해할 수있는 방법을 알 수 없기 때문에 "노력"한다고 말합니다. –

+0

@ 안드레아스 더 강력한 원칙이 있습니다. 자신이나 타인이 오해 할 가능성이있는 것을 사용하지 마십시오. '++ i'와'i ++'의 차이점은 대표적인 예입니다. –

16

내가 반대 제안을하면 누구나 ...?

가능한 경우 증분 (++) 및 감소 (-) 연산자를 사용하십시오. 훨씬 더 간단합니다. (그리고 그들이 그곳에있는 이유입니다.)

+1

동의. 왜 C 구문을 처음부터 멋지게 만드는지보다 편리한 언어 요소를 사용해야하는 이유는 무엇입니까? – Robusto

+1

'++'/'--', 나는 항상 사용하고 있습니다. 하나. 나는 그들을 정말로 더 간단하게 부를 수 있는지 모르겠다. 'var c = a ++ + b' 및'var c = a + ++ b'를 고려하십시오. * 세 변수 모두 공백을 두는 위치에 따라 값이 달라집니다. 여기서 'var c = a +++ b' –

+2

@David Hedlund를 잘못 해석 할 가능성이 있습니다. 잠재적 인 혼란이 있습니다. 그러나 증분 연산자는 증분에 유용합니다. 그것의 목적은 그것이 얻는 것만큼이나 간단합니다. '+ = 1' 또는'= var + 1'을 사용하는 것은 x * 2 대신 무언가를 두 배로 만들 때 x + x를하는 것처럼 보입니다. – froadie

4

내가 생각할 수있는 유일한 이유는 자바 스크립트가 다른 어떤 코드 (html ??)보다 편집 가능성이 높기 때문입니다.

멍청한 놈에 따라서,

x=x+1 ; 

x++; 

경험이 풍부한 프로그래머 처리, 정말 중요하지 않습니다보다 더 많은 읽을 수 있습니다.

7

나는이 연산자가 낙심 한 유일한 시간은 Douglas Crockford'sJavaScript: The Good Parts입니다.

증분 및 감소 연산자가 가능 매우 간결한 스타일로 작성합니다 부록 "불량 부품"에서 인용

.

for (p = src, q = dest; !*p; p++, q++) *q = *p; 

그들은 또한 밝혀, 무모, 프로그래밍 스타일을 장려 : C와 같은 언어에서, 그들은 그것이 가능한 문자열의 복사본을 할 수있는 한 라이너를 작성합니다. 끔찍한 보안 취약점을 일으킨 버퍼 오버런 버그의 대부분은 이와 같은 코드 때문이었습니다.

내 자신의 경우, ++--,을 사용하면 코드가 너무 빡빡 해지기 쉬운 것으로 나타났습니다. 그래서 규율의 문제로서, 나는 더 이상 그들을 사용하지 않습니다. 결과적으로 제 코딩 스타일이 명확 해졌습니다.JSLint documentation (그가 쓴 코드 품질 도구)에서 인용 또한

:

++ (증가) 및 -- (감소) 연산자에 의해 나쁜 코드에 기여하는 것으로 알려져 있습니다 과도한 교활함을 장려한다. 바이러스 및 기타 보안 위협을 가능하게하는 데있어 아키텍처의 결함에 이어 두 번째입니다. 이 연산자의 사용을 금지하는 plusplus 옵션이 있습니다.

그는이 연산자를 정말 좋아하지 않습니다 ...하지만 어서 오세요! 나는 여전히 암호 코드를 쓰지 않고 ++-- 연산자를 사용할 수 있다고 생각합니다. 나는 그들을 사용하고, 나는 그들을 좋아한다. 모두가 사용합니다.

JSLint에는 이러한 연산자를 허용하지 않을 수도 있지만이 옵션은 기본적으로 사용되지 않습니다.

+6

글쎄. 크로크 포드가 그의 발에있는 구멍 때문에 총을 비난하고있는 것 같습니다. 아니면 어쩌면 그것은 그 밀짚 남자였습니다 ... – annakata

+0

끔찍한 보안 취약점을 만든 대부분의 버퍼 오버런 버그는 C 문자열이 null로 종료된다는 사실 때문이었습니다. –

7

Crockford et al. 사용을 꺼리는 것은 ++/-- 부작용이 있다는 것입니다. i++; 대신에 i+=1;을 사용할 이유는 거의 없습니다. 단 하나의 명령문 만 있기 때문에 여러 가지 이유가 있지만 ++은 규칙 위반을 일으킬 수 있습니다.

++을 사용하면 머리 속에 i++++i의 구별을 할 필요가 없습니다. 그것은 우리가 영리하고 혼란스럽게 그들을 사용하려고 시도 할 가능성이 적음을 의미합니다. 이런 이유로 사용하지 않는 것이 좋습니다.

0

++를 사용하고 표준이며 거기에있는 좋은 상태입니다.

3

++/--을 사용하면 해당 의미가 공백에 매우 민감하기 때문에 js 축소 옵션을 제한 할 수 있습니다. minifier에 따라 작업 코드에 오류가 발생할 수도 있습니다. Crockford가 설명합니다 (주의 절) here.

+1

축소하는 코드를 이해하지 못하는 축소기를 사용하지 마십시오. –

관련 문제