증감(IncDec) 문장

증감(IncDec) 문장

++-- 문장, 즉 증감 문장은 값을 하나 늘리거나 줄이는 표기예요. C 계열 언어를 쓰다 온 분이라면 사용법을 이미 아시겠지만, Go에서는 '언제 쓸 수 있고 정확히 무엇을 하는가'가 엄격하게 정의되어 있어요. 그 규칙을 하나씩 짚어볼게요.

출처: Go Specification

본문

++-- 문장은 피연산자(operand)를 untyped 상수(constant) 1만큼 증가시키거나 감소시켜요. 대입(assignment)과 마찬가지로, 피연산자는 주소 지정 가능(addressable)한 값이거나 맵 인덱스 표현식(map index expression)이어야 해요. 즉 상수나 리터럴 같은 데에는 ++를 붙일 수 없어요 — 값을 바꿀 수 있는 대상이어야 하죠.

문법(EBNF)으로는 이렇게 생겼어요.

<a id="IncDecStmt">IncDecStmt</a> = <a href="#Expression" class="noline">Expression</a> ( "++" | "--" ) .

Expression 다음에 ++ 또는 -- 하나가 오는 형태, 그게 전부예요.

그리고 이 문장은 아래의 대입 문장(assignment statements)들과 의미적으로 완전히 같아요 (semantically equivalent).

IncDec statement    Assignment
x++                 x += 1
x--                 x -= 1

x++x += 1과 같은 뜻이고, x--x -= 1과 같아요. 다만 Go에서 ++--는 값으로 평가되지 않는 문장(statement) 이라는 점이 포인트예요. y = x++처럼 대입의 값으로 쓰면 컴파일되지 않으니, 다른 언어에서 넘어온 분이라면 이 부분을 특히 기억해 두시면 좋아요.

더 알아보기