Expression과 Statement

Expression과 Statement

식(Expression)과 문(Statement)

Rust는 거의 모든 부분에서 식(Expression)을 많이 사용하는 Expression 지향적인 언어이다. Statement는 값을 리턴하지 않는 문장이며, Expression은 값을 리턴하는 수식을 의미한다. Rust에서 Statement 뒤에는 세미콜론을 넣고, Expression 자체는 세미콜론을 갖지 않는다. 만약 Expression 뒤에 세미콜론을 넣으면, 일반적으로 이는 Statement로 변경되어 값을 리턴을 하지 않게 된다(즉, 값 리턴이 Suppress 됨).

Rust에서는 일반적으로 함수나 코드 블럭({...} 블럭)의 마지막에 Expression을 넣어 값을 리턴한다. Rust 함수는 함수의 Body 블럭 안에 Statement와 Expression을 가질 수 있다. 하나의 함수는 여러 개의 Statement들을 가질 수 있으며, 마지막에 옵션으로 Expression을 가질 수 있다. 함수가 리턴값을 갖는 경우 return 문을 사용하거나 함수 마지막에 Expression을 넣어 값을 리턴하게 된다. 함수의 중간에 값을 리턴해야 하는 경우는 return문을 하고, 마지막에서 값을 리턴할 때는 보통 (return문 대신) Expression을 사용한다.

아래 예제에서 add() 함수는 return 문(statement)을 쓰지 않고 Expression을 사용하여 값을 리턴하고 있다. 여기서 Expression인 a + b 뒤에 세미콜론을 넣지 않았는데, 만약 여기에 세미콜론을 넣으면 (Statement로 변경되면서) 값을 리턴하지 않게 되어 컴파일러 에러가 발생한다. 즉, add() 함수는 i32를 리턴하도록 정의되어 있는데, 리턴값이 Suppress되어 아무것도 없는 값인 () (Rust에서 이를 unit 타입이라 함)이 리턴되어 타입이 매칭되지 않기 때문에 에러가 발생한다.

fn main() {
    let c = add(1, 2);
    println!("{}", c);
}

fn add(a: i32, b: i32) -> i32 {
    dbg!(a, b);
    // return a + b;   // Statement 사용
    a + b              // Expression 사용
}

아래 예제는 if/else 블럭에서 Expression을 사용한 예로서, 변수 number가 2로 나누어 떨이지면 "even" 이라는 값을 리턴하고, 아니면 "odd" 라는 값을 리턴하는 표현이다. 여기서 "even" 이나 "odd" 리터럴 값 뒤에 세미콜론을 찍는다면, 에러가 발생할 것이다.

    let number = 13;
    let odd = if number % 2 == 0 { "even" } else { "odd" };
    
    println!("{}: {}", number, odd);

This site is not affiliated with or endorsed by the Rust Foundation or Rust Project.