logo

Expression vs Statement

Chapter 7

41 조회

0 추천

628 단어

4분 예상

2024. 08. 16. 게시

luasenvy 작성

CC BY-NC-SA 4.0

위 영상에서 아주 명확하게 알려준다. 한 번은 시청하길 적극 권장한다.

Expression / 값과 함수

직역하면 "식"이 되지만 이 문서에서는 프로그래밍 언어내에서 사용하는 문법적 의미를 말한다. 넓은 의미로 함수와 값은 다르지 않다. 이름에서 부터 함수函數 즉 "수"를 일컫는 것이다. 인터프리터 입장에서 함수도 결국 마지막에 반환된 즉, 값을 표현하는 수단이다. 이는 곧 함수와 값이 동일하게 표현될 수 있음을 의미한다.

2 + Math.pow(2, 1 + 1); // 소스

2 + Math.pow(2, 2); // 1단계
2 + 4; // 2단계
6; // 결과

위 예제는 값 3개와 함수 1개로 이루어져 있다. 총 4개의 expression으로 구성되어 있으며 인터프리터 입장에서 하나의 값으로 볼 수 있다. 직관적으로도 2 + 2^2 = 6 등식이 성립하는 것을 생각해볼 수 있다.

Statement

마찬가지로 프로그래밍 언어내의 문법적 의미를 말하며 if, for, switch, break, 등의 일종의 작동방식을 일컫는다. Expression처럼 "값"을 표현하는 문법이 아닌 나머지라고 생각하면 된다.

const value = 2 + Math.pow(2, 2); // 소스

위 예제에서는 const value = 이 부분이 Statement에 속한다. 값을 나타내는 것이 아닌 메모리를 어떻게 설정할지에 대한 작동방식에 대한 설명이다. 값이 될 수 없다. 이렇듯 expression과 statement의 차이점을 이해하면 왜 오류가 나는지 조금은 더 깊게 이해할 수 있다.

Math.pow(2, const a = 2); // ERROR

함수는 expression으로 값으로 표현될 수 있어야 한다. 물론, 직접 실행될 필요까지도 없이 문법적 구문 오류에서 걸러지겠지만 실행된다고 가정한다면 직관적으로는 a변수에 2가 할당되고 2^2이 계산되는 것이 합리적으로 보인다. 그러나 실행해야하는 인터프리터의 입장이 되어본다면 단계를 거칠 수가 없다. Math.pow() 함수는 위에서 정리했듯 expression이므로 값으로 볼 수 있어야 하는데 중간에 const a statement가 위치하게 되면서 값으로 취급할 수가 없게 된다.