シャドーイングとは?
しゃどーいんぐ
プログラミングで、内側のスコープで同名の変数を宣言することにより、外側の同名変数が隠れてしまう現象です。
シャドーイング(Shadowing)とは、プログラミングにおいて、内側のスコープ(ブロックや関数の内部)で外側と同じ名前の変数を新たに宣言したとき、内側からは外側の変数にアクセスできなくなる現象です。まるで外側の変数が「影に隠れた(shadowed)」ように見えなくなることからこの名称が付いています。
多くのプログラミング言語がシャドーイングを許可しています。たとえばRustでは変数の再バインディングとしてシャドーイングを意図的に活用でき、同じ変数名に異なる型の値を順番に結びつけることが可能です。一方、JavaScriptではブロックスコープの変数(let/const)が同じスコープ内では再宣言できませんが、ネストしたスコープではシャドーイングが発生します。
シャドーイングが問題になる典型例は次のとおりです。
- ループ変数と外側の同名変数が衝突し、意図しない値を参照してしまう
- 関数の引数名とグローバル変数名が一致し、グローバル変数の更新が行われない
- コードを読む人が「どちらの変数を指しているか」を把握しにくくなる
意図的なシャドーイングは可読性を高める場合もありますが、意図せず発生したシャドーイングはバグの温床になります。多くのリンターやコンパイラは警告を出す設定を持っているため、チームの規約に従って活用・抑制を使い分けることが重要です。
使い方・例文
Rustで文字列を受け取って整数に変換するとき、let x = x.parse::<i32>().unwrap(); のように同じ変数名xでシャドーイングすることで、異なる型の値を同じ名前で扱う実装がよく行われます。
この用語をシェア
最終更新: