명령문
- 명령문은 계산이 반드시 값을 반환할 필요는 없지만 부작용이 있을 수 있는 구문 엔터티이다.
- 명령문은 모든 프로그래밍 언어에 존재하는 것은 아니지만 일반적으로 명령형 언어에서 사용된다.
- 명령문을 실행(또는 평가)함으로써 프로그램 상태를 계속 변경할 수 있다.
- 예) print("Hello World!")
- 프린트를 함으로써 모니터의 상태가 변경된다.
정의의 모호함
- 표현식과 명령문을 정의하기 위해 정확하고 정확하게 정의되지 않은 '계산(evaluation)'라는 용어를 사용했다.
- 다른 언어에서는 표현식에 부작용이 있을 수 있고 명령문에 반환 값이 있을 수 있다.
- C에서 할당은 변수 값을 수정하고 값을 반환한다.
- 주요 차이점은 계산 전에 상태가 고정되어 있으면
- 표현식 계산 결과 : 값
- 명령문 계산 결과 : 상태 변경
변수의 개념
- 프로그래밍 언어에서는 두 가지 변수 모델이 사용된다.
- 수정 가능한 변수(Modifiable Variable)
- 변수는 값을 저장하는 컨테이너 또는 위치로 간주된다.
- 값은 할당을 실행하여 "수정 가능"합니다.
- 참조 모델(Reference Model)
- 변수는 값의 컨테이너가 아니라 메모리에 저장된 값에 대한 참조로 간주된다.
- 수정 가능한 변수에서는 변수 자체가 컨테이너이다.
- 참조 모델에서 변수는 단지 메모리 위치에 대한 참조일 뿐이다.
- 이는 변수의 개념으로 언어마다 구현이 다를 수 있다는 점에 유의해야한다.
할당(Assignment)
- 할당은 수정 가능한 변수와 연관된 값을 수정하는 명령문이다.
- <assign> ::= <expr1><opAssign><expr2>
- <expr1>의 경우 l-value를 사용하고 <expr2>의 경우 r-value가 필요하다.
- x = 3;
- x = x + 1;
- 왼쪽에는 x의 left-값(위치)을 사용하고, 오른쪽에는 x의 right-value(값 3)을 사용한다.
- 할당은 참조 모델의 변수와 어떻게 작동하는가?
- x = y
- y의 값을 변수 x에 복사한다는 의미가 아니다.
- 오히려 이제는 동일한 객체에 대한 두 개의 참조이다.
- y를 수정할 수 있으며 x를 통해 볼 수 있다.
- 포인터 변수와 유사하지만 참조 모델에서는 할당을 통해 간접적으로만 값을 수정할 수 있다.
- Java는 클래스의 변수에 대한 참조 모델을 사용하는 언어이다.
- City c = new City("Seoul");
'프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 22. 재귀(Recursion) (0) | 2023.10.12 |
---|---|
[프로그래밍언어론] 21. 제어 흐름(Control Flow) (0) | 2023.10.11 |
[프로그래밍언어론] 19. 표현식(Expression) (0) | 2023.10.11 |
[프로그래밍언어론] 18. 파이썬으로 CRT 구현 (0) | 2023.10.11 |
[프로그래밍언어론] 17. 범위 규칙 구현(Scope Rule Implementation) (0) | 2023.10.11 |