変数

宣言と代入

変数はletを使用して宣言します。
多くの場合、型名は省略可能です。

fn main() {
    let a: i32 = 42;
    let b = 42;
}

初期化は必須ではありませんが、未初期化の状態で変数を参照することはできません。

fn main() {
    let a: i32;
    let b: i32 = a;  // compile error
}

可変性

変数は標準で 不変 になります。

fn main() {
    let a: i32 = 42;
    a = 57;  // compile error
}

値を変更したい場合は、mutキーワードを使用して可変にすることができます。

fn main() {
    let mut a: i32 = 42;
    a = 57;  // OK!!
}

シャドーイング

スコープ毎に現れた同名の変数は前の変数を覆い隠します。
また、変数の型は同一である必要はありません。

fn main() {
    let a: i32 = 1;
    let a: i32 = a + 1;

    {
        let a: i32 = 5;
        assert_eq!(a, 5);
    }

    assert_eq!(a, 2);
}