Rustのプログラムは(ほとんどの場合)文(statement)の連続でできています

fn main() {
    // statement
    // statement
    // statement
}

宣言文にはいくつかの種類があります。最も一般的なのは変数の束縛(variable binding)と;付きの式(expression)です

fn main() {
    // variable binding
    // 変数束縛
    let x = 5;

    // expression;
    // 式;
    x;
    x + 1;
    15;
}

コードブロックも式の一種です。よってブロックを丸ごと値として扱うことができます。その場合ブロック内の最後の式が場所を表す式(例えばローカル変数)に代入されます。ただし、ブロック内の最後の式が;で終わる場合は返り値は()になります。

fn main() {
    let x = 5u32;

    let y = {
        let x_squared = x * x;
        let x_cube = x_squared * x;

        // This expression will be assigned to `y`
        // この式は`y`に代入されます。
        x_cube + x_squared + x
    };

    let z = {
        // The semicolon suppresses this expression and `()` is assigned to `z`
        // セミコロンがあるので`z`には`()`が入ります。
        2 * x;
    };

    println!("x is {:?}", x);
    println!("y is {:?}", y);
    println!("z is {:?}", z);
}