대입문

x = 5는 문장일까, 값을 가진 식일까?

대입문

식의 값을 변수에 넣습니다

대입문(assignment statement)은 식을 평가한 값을 변수에 넣는 문장입니다. 1강에서 본 대로 명령형 언어의 중심입니다. 대입 연산자는 Fortran, BASIC, C 계열이 =, Ada가 :=입니다.

C 계열은 같은지 견줄 때 ==를 따로 씁니다. 그래도 조건에 =를 잘못 쓰는 실수가 흔합니다. a와 b의 값은 예시입니다.

복합 대입 연산자

계산과 대입을 한 번에

a = a + b를 a += b로 줄여 쓰는 것이 복합 대입 연산자(compound assignment operator)입니다. ALGOL이라는 언어에서 처음 나왔고 C 계열이 받아들였습니다. 대상 변수를 한 번만 쓰니 짧고, 틀릴 곳도 줄어듭니다.

-=, *=, /=도 같은 방식입니다. a가 5, b가 3이라는 값은 예시입니다.

단항 대입 연산자

++는 앞이냐 뒤냐가 다릅니다

C 계열의 ++와 --는 1 늘리기와 1 줄이기를 대입과 합친 단항 대입 연산자(unary assignment operator)입니다. 앞에 붙이면 먼저 늘린 뒤 그 값을 쓰고, 뒤에 붙이면 지금 값을 쓴 뒤에 늘립니다.

count가 5에서 시작한다는 것은 예시입니다. count++만 따로 쓰면 count가 1 늘어날 뿐입니다.

식으로서의 대입

대입도 값을 냅니다

C 계열, Perl, JavaScript에서는 대입이 값을 냅니다. 그래서 대입을 더 큰 식의 피연산자로 쓸 수 있습니다. 위 코드는 글자를 읽어 ch에 넣는 일과, 그 값을 EOF와 견주는 일을 한 식에서 합니다.

getchar()는 글자 하나를 읽어 오는 함수, EOF는 입력의 끝입니다. 식 안에서 변수가 바뀌니 이것도 부작용이고, ==를 쓸 자리에 =를 써도 오류가 나지 않는 까닭입니다.

다중 대입

임시 변수 없이 맞바꿉니다

Perl과 Ruby에서는 여러 변수에 여러 값을 한 번에 넣을 수 있습니다. 왼쪽 변수들과 오른쪽 값들이 순서대로 짝지어집니다. 그래서 두 변수의 값을 임시 변수 없이 한 줄로 맞바꿀 수 있습니다.

Perl에서 $는 변수 이름 앞에 붙이는 기호입니다. 값 20과 30은 예시입니다.

혼합 모드 대입

타입이 다른 값을 넣어도 될까

대입문의 왼쪽 변수와 오른쪽 식의 타입이 다른 것이 혼합 모드 대입(mixed-mode assignment)입니다. 언어가 알아서 바꿔 주는 범위가 다릅니다. 엄격할수록 안전하고, 자유로울수록 편하지만 틀리기 쉽습니다.

6편에서 본 대로, 정수를 소수 변수에 넣는 것이 확대, 소수를 정수 변수에 넣는 것이 축소입니다.

다음 강의

7강은 문장의 실행 순서를 정하는 제어 구조입니다

6강 끝목록으로 돌아가기