Rust言語では{
〜}
によるブロック構造も式(block expression)として扱う。[本記事はRust 1.0/Stable準拠]
ブロック式全体の評価結果は、次の型/値となる。
- 唯一の部分式、または最終セミコロン
;
の次に出現する部分式の型/値。 - ブロック式内が
;
で終わっている場合は、ユニット型(unit type)の値()
。
let a = { 1u8 + 2 + 3 }; // u8型の値6 let b = { println!("X"); 42 }; // i32型の値42 let c = { println!("Hello"); }; // unit typeの値()
関数本体から戻り値を返す場合などで、少し注意が必要となる。returnを明示するスタイルならあまり関係ないが、下記例では関数h()のみがコンパイルエラーとなる。*1
fn f() -> i32 { 1 } // OK fn g() -> i32 { return 1; } // OK fn h() -> i32 { 1; } // NG // error: not all control paths return a value [E0269]
C言語系統などの手続き型パラダイム言語ではセミコロンを “文(statement)の終端マーク” と解釈することが多いが、Rust言語では “部分式(expression)間の区切りマーク” と解釈する方が自然。*2
関連URL