一時的な可変性

説明

データを準備して処理する必要があることがよくありますが、その後はデータを検査するだけで変更することはありません。可変変数を不変として再定義することで、その意図を明示的に示すことができます。

これは、ネストされたブロック内でデータを処理するか、変数を再定義することで実現できます。

例えば、ベクタを使用する前にソートする必要があるとします。

ネストされたブロックを使用する場合:

let data = {
    let mut data = get_vec();
    data.sort();
    data
};

// Here `data` is immutable.

変数の再束縛を使用する場合:

let mut data = get_vec();
data.sort();
let data = data;

// Here `data` is immutable.

利点

コンパイラが、ある時点以降に誤ってデータを変更しないことを保証します。

欠点

ネストされたブロックでは、ブロック本体に追加のインデントが必要になります。ブロックからデータを返すか、変数を再定義するために、もう1行必要になります。