새로운 제어 문법

새로운 제어 문법 (New Control Syntax)

Scala 3에는 제어 표현식을 위한 새로운 "조용한"(quiet) 문법이 있어요. 조건을 괄호로 감싸지 않아도 되고, for 표현식의 생성자(enumerator) 주변의 괄호나 중괄호를 떼어낼 수도 있죠. 예시를 볼게요:

if x < 0 then
  "negative"
else if x == 0 then
  "zero"
else
  "positive"

if x < 0 then -x else x

while x >= 0 do x = f(x)

for x <- xs if x > 0
yield x * x

for
  x <- xs
  y <- ys
do
  println(x + y)

try body
catch case ex: IOException => handle

출처: Scala 3 Reference

본문

자세한 규칙은 다음과 같아요:

  • if 표현식의 조건은 뒤에 then이 온다면 감싸는 괄호 없이 쓸 수 있어요.
  • while 루프의 조건은 뒤에 do가 온다면 감싸는 괄호 없이 쓸 수 있어요.
  • for 표현식의 열거자(enumerator)는 뒤에 yielddo가 온다면 감싸는 괄호나 중괄호 없이 쓸 수 있어요.
  • for 표현식에서 do는 for 루프를 나타내요.
  • catch는 같은 줄에 단일 case가 올 수 있어요. 여러 개의 케이스라면 (Scala 2에서처럼) 중괄호 안이나 들여쓴 블록 안에 있어야 해요.

다시 쓰기 (Rewrites)

Scala 3 컴파일러는 소스 코드를 예전 문법에서 새 문법으로, 그리고 그 반대로도 다시 쓸 수 있어요. -rewrite -new-syntax 옵션과 함께 호출하면 예전 문법에서 새 문법으로 다시 쓰면서 조건과 열거자에서 괄호와 중괄호를 떼어내요. -rewrite -old-syntax 옵션과 함께 호출하면 반대 방향으로 다시 써서 필요에 따라 괄호와 중괄호를 넣어 주죠.