더북(TheBook)

유사 문장 표현식이 다른 표현식과 같이 나오는 경우는 어떻게 처리할까? 일단, 문법의 우선순위 테이블에 맞춰 넣어야 한다. 예를 들어, 루비에서는 다음과 같이 코딩할 수 있다.

puts 1 + if true then 2 else 3 end + 4

여러분은 이런 코드를 예상했는가? 여러분의 언어를 쓰는 사용자가 정말 이렇게 코딩할까? 이런 요소가 ‘문장’ 구문을 디자인하는 데 어떤 영향을 미칠까? 루비는 if 식이 언제 완료되는지 end로 명시한다. 그렇지 않으면 위 코드에서 + 4else 절의 일부로 파싱될 것이다.

문장을 모조리 표현식으로 바꾸려면 이와 같은 난제를 해결해야 한다. 그 대가로 중복성(redundancy)을 없앨 수 있다. C는 문장을 나열하는 블록과 표현식을 나열하는 쉼표 연산자를 모두 지원한다. if 문도 있고 조건부 연산자 ?:도 있다. 만약 C에서 모든 게 표현식이었다면 이런 것들도 하나로 합쳐졌을 것이다.

문장이 없는 언어에는 보통 암묵적 리턴(implicit return) 기능이 있다. 덕분에 함수는 return 문을 명시하지 않아도 바디를 평가한 값이 알아서 리턴된다. 작은 함수나 메서드에서 이 기능은 정말 편리하다. 문장을 사용하는 많은 언어에서도 => 같은 구문으로 바디가 단일식의 평가 결과가 되는 함수를 정의할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.