디자인 노트 | 표현식과 문장
록스는 표현식과 문장 둘 다 가진 언어다. 어떤 언어는 문장이 없는 대신 선언과 제어 흐름 구조를 표현식으로 취급한다. 이처럼 ‘만사가 표현식인’ 언어는 대부분 함수형 언어의 혈통을 가진, 리스프, SML, 하스켈(Haskell), 루비, 커피스크립트(CoffeeScript) 같은 언어다.
그러기 위해서는 ‘유사 문장(statement-like)’ 언어의 구조를 각각 어떤 값으로 평가할지 결정해야 한다. 그중 일부는 쉽다.
• if 식은 선택된 분기의 결과로 평가된다. switch 같은 다중 분기(multi-way branch) 표현식은 선택된 케이스로 평가된다.
• 변수 선언은 그 변수의 값으로 평가된다.
• 블록은 가장 마지막 표현식의 결과로 평가된다.
조금 생소한 것들도 있다. 루프는 무엇으로 평가해야 맞을까? 커피스크립트에서 while 루프는 바디가 평가한 각 원소가 포함된 배열로 평가된다. 간편해서 좋지만 배열이 필요하지 않을 때엔 메모리 낭비다.