Rust expression과 semicolon
Posted on November 24, 2018
by 주형
Tags: rust
Expression
Rust는 모든 요소가 값을 가지진 않지만 꽤 많은 문법 요소들이 값을 가집니다. 특히 if/else문, block, match구문이 값을 가지는 expression입니다. 여러 문법적 요소가 expression을 지원하면, 값의 계산한 결과값을 변수 선언에 넣을 수 있기 때문에 immutable 하게 값을 사용하기 좋습니다.
// if가 statement라면
let x = true;
let mut a: Option<i32> = None;
if x {
= Some(3);
a } else {
= Some(4);
a }
println!("a : {}", a.unwrap());
// if가 expression이라면
let x = true;
let a = if x {
3
} else {
4
};
println!("a : {}", a);
block구문이 값을 가지기 때문에 일시적으로 필요한 변수들을 블록으로 감싸기 좋습니다.
let area = {
let pi = 3.14;
let r = 2;
2 * pi * r
};
match는 다른 언어에서 만나도 보통 expression이죠.
let my_option = Some(3);
let a = match my_option {
Some(x) => x * 2,
None => 0,
}
Semicolon
C언어를 사용할 땐 모든 statement에 semicolon을 붙입니다. Rust는 함수나 블록의 마지막 값에 semicolon을 붙이지 않으면 자동으로 해당 값이 return됩니다.
fn foo() -> i32 {
println!("Here is foo");
3
}
fn bar() -> i32 {
println!("Here is bar");
return 3;
}
이를 좀 다르게 생각해보면 ;
이 일종의 operator라는 관점을 가져볼 수 있습니다. expressionA ;
expressionB 를 실행시키면 expressionA를 실행한 뒤 값을 버리고 expressionB의 결과값을 return시키는 operator인거죠.