一時的なミュータビリティ

説明

あるデータを準備・処理する必要があり、いったんそれが済めば、データは参照されるだけであり、変更されることはない、という状況がよくあります。このような状況では、可変変数を不変変数として再定義することで、その意図を明示することができます。

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

ベクタが使用される前にソートする必要がある、という状況を考えましょう。

ネストされたブロックを使う場合:

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

// ここで `data` は不変である。

変数の再束縛を使う場合:

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

// ここで `data` は不変である。

長所

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

短所

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

Last change: 2024-07-09, commit: 317c88e