Dev Study
← 解説「シャドーイング — 同じ名前で再宣言」に戻る

サンプルコードで身につける: シャドーイング — 同じ名前で再宣言

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1同じ名前で変数を作り直す

let を2回書いて、前の x を材料に新しい x を作る最小の例です。mut を付けた再代入と違い、1行目の x と2行目の x は別の変数です。「加工前の値をうっかり使う」余地をなくせるのがシャドーイングの利点です。

Rust

2シャドーイングなら型を変えられる

文字列の input を、同じ名前のまま数値(usize)の input に変える例です。mut の再代入では型を変えられませんが、シャドーイングは新しい変数なので型が違っても構いません。「同じ意味のデータの形だけが変わる」場面で、input_str / input_len のような名前を増やさずに済みます。

Rust

3mut の再代入とシャドーイングの違い

前半は mut による再代入(同じ変数の値の書き換え)、後半はシャドーイング(同じ名前の新しい変数)を並べた比較の例です。label は i32 から &str に型が変わっており、これは再代入では不可能です。2つの仕組みの区別が曖昧なうちは、この対比を思い出してください。

Rust

4ブロックの中だけのシャドーイング

波括弧のブロック内でシャドーイングした level は、ブロックを抜けると消えて元の level に戻る、というスコープの性質を示す例です。内側の変更が外に漏れないため、「一時的にだけ違う値で計算したい」場面で安全に使えます。デバッグ用に一部分だけ値を差し替えるときにも役立つ性質です。

Rust

5計測値を段階的に加工する

メートルの整数値を km の f64 に変え、さらに往復分にする、という加工の各段階を同じ名前 distance で持ち続ける実務寄りの例です。途中で型まで変わっていますが、シャドーイングなら自然に書けます。「入力 → 単位変換 → 補正」のようなデータ加工のパイプラインはこの形が定番です。

Rust