一時的な可変性
説明
多くの場合、何らかのデータを準備して処理する必要がありますが、その後そのデータは 参照されるだけで、変更されることはありません。可変変数を不変として再定義することで、 その意図を明示できます。
これは、ネストしたブロック内でデータを処理するか、変数を再定義することで実現できます。
例
たとえば、ベクターは使用前にソートされていなければならないとします。
ネストしたブロックを使用する場合:
let data = {
let mut data = get_vec();
data.sort();
data
};
// ここで `data` は不変です。
変数の再束縛を使用する場合:
let mut data = get_vec();
data.sort();
let data = data;
// ここで `data` は不変です。
利点
コンパイラーは、ある時点以降に誤ってデータを変更しないことを保証します。
欠点
ネストしたブロックでは、ブロック本体に追加のインデントが必要です。ブロックから データを返す、または変数を再定義するために、さらに1行必要です。