JavaScript로 프로그래밍 할 때 문과 블록으로 수행 할 수있는 모든 것이 식만으로 수행 될 수 있다는 것을 알게되었습니다. 프로그래밍 언어는 표현식만으로도 잘 작동합니까? 그렇다면, 왜 진술이 사용됩니까?
JavaScript로 프로그래밍 할 때 문과 블록으로 수행 할 수있는 모든 것이 식만으로 수행 될 수 있다는 것을 알게되었습니다. 프로그래밍 언어는 표현식만으로도 잘 작동합니까? 그렇다면, 왜 진술이 사용됩니까?
답변:
확실한. 가장 간단한 방법은 현재 명령문 인 모든 구문에 결과 값을 할당하여 표현식으로 바꾸는 것입니다. 그래도 반드시 유용하거나 의미있는 것은 아닙니다. 유일한 잠재적 이득은 약간의 개념적 단순성입니다. 그러나, 경우에 당신이 다음 세미콜론과 루프 같은 것들을 제거를 진행합니다 (대신 다른 연산자와 함수를 통해 체인이 필요), 프로그램은 많이 사용하는 문은 추한된다.
이 작업을 수행하는보다 급진적하지만 의미있는 방법으로 거의 모든 있도록 언어 설계하는 이 의미있는 값을, 당신은 거의 항상되지 않은 다른 효과, 의미있는 값을 식을 사용하는 방법을 사용합니다. 함수형 프로그래밍 언어는이를 수행합니다 (예 : Haskell에는 표현식이 아닌 선언이 있음).
명령형 패러다임에는 유용한 결과 값이없는 많은 공통 연산이 있고 계산이 아닌 순차적 명령어 개념이 해당 패러다임에 잘 맞기 때문에 명령문이 사용됩니다 . 프로그램의 많은 부분이 새로운 값을 계산하는 대신 변이 상태 인 경우 값을 생성 해야하는 것은 의미가 없습니다 (for 루프의 결과는 무엇입니까?). 반대로 전체 패러다임 (FP)이 값 계산을 기반으로 구축 된 경우 결과 값이없는 특이 치는 예외를 보증하지 않습니다. 대신 의미가 아닌 센티넬 결과를 제공합니다.
"statement"및 "expression"을 정의하는 방법에 따라 다릅니다.
매우 엄격한 정의는 "부작용이 있고 반환 값이있는 것"으로 표현과 "반환 값이 있지만 부작용을 가질 수없는 것"으로 표현을 구분합니다. 이러한 정의를 사용하면 적어도 하나의 명령문 (표현식을 평가하고 반환 값을 출력해야 함)없이 의미있는 프로그램을 작성할 수 없습니다. 순수한 표현식만으로는 프로그램 외부의 세계와 상호 작용할 수 없습니다. 불순한 부분이 언어에서 벗어나 지원 생태계로 이동하면 언어만으로도 완전히 순수 할 수 있습니다 (예 : 문장이 없음) (언어는 정의뿐만 아니라 표현도 있지만) .
그러나 표현식에서 부작용을 허용하면 명령문과 표현식의 구별이 임의적이면서 훨씬 덜 흥미로워집니다. 물론 표현식만으로 구성된 프로그래밍 언어를 발명 할 수 있습니다. 대부분의 Lisp 방언은 그런 식으로 작동합니다. 이러한 상황에서 부작용에 대한 표현식을 평가하는 것은 명령문을 실행하는 것과 거의 동일하며 이러한 언어에서는 표현식과 명령문이 동일하다고 주장 할 수 있습니다. 그러므로 명령문과 표현식의 차이점은 구문 일뿐입니다.
많은 언어들이 여전히이 구문을 구별합니다. 왜냐하면 기술적 인 이유가 아니라 가독성에 유용하기 때문입니다. 식을 만들면 반환 값에 관심이 있고 부작용이 적다는 것을 알 수 있습니다. 그것을 진술하면 독자에게 부작용을 일으킬 의도가 있으며 반환 값은 흥미 롭거나 그렇지 않을 수 있습니다.
예.
기능적 언어 (및 단일 할당 언어)는 모두 표현입니다. 예는 Haskal (및 SISAL)입니다. if 문과 for 루프 모두 값을 반환합니다.
다른 종류의 언어가 있습니다. 마음에 들기 쉬운 언어는 선언적 언어입니다 (문에 의존하지 않는 다른 언어도 많이 있습니다). 이 언어들은 표현이 필요하지 않습니다 (일반적으로 생각하는 것과 같은 의미로). 사실을 선언하면 여러 결과를 얻을 수 있습니다. 가장 쉬운 방법은 prolog
입니다.