一時的な可変性
説明
データを準備して処理する必要があることがよくありますが、その後はデータを検査するだけで変更することはありません。可変変数を不変として再定義することで、その意図を明示的に示すことができます。
これは、ネストされたブロック内でデータを処理するか、変数を再定義することで実現できます。
例
例えば、ベクタを使用する前にソートする必要があるとします。
ネストされたブロックを使用する場合:
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行必要になります。