スコープ
Rustでは、スコープ(scope)は変数や関数などの要素が有効である範囲を指します。スコープを理解することで、プログラムの構造や変数のライフタイムをよりよく管理できます。
スコープの基本
Rustでは、{}
で囲まれた領域がスコープを形成します。スコープ内で宣言された変数は、そのスコープ内でのみ有効です。
fn main() { let x = 5; // xはこのスコープ内で有効 { let y = 10; // yはこの内側のスコープ内で有効 println!("x: {}, y: {}", x, y); // xとyは両方ともここで使用可能 } // println!("y: {}", y); // エラー: yはこのスコープでは無効 }
グローバルスコープとローカルスコープ
- グローバルスコープ:プログラム全体で有効なスコープです。通常、関数外で宣言された定数や関数が含まれます。
- ローカルスコープ:特定のブロックや関数内でのみ有効なスコープです。
const GLOBAL_CONST: i32 = 100; // グローバルスコープ fn main() { let local_var = 50; // ローカルスコープ println!("Global: {}, Local: {}", GLOBAL_CONST, local_var); }
スコープのネスト
スコープはネストすることができ、内側のスコープから外側のスコープの変数にアクセスできますが、その逆はできません。
fn main() { let outer = "outer"; { let inner = "inner"; println!("Outer: {}, Inner: {}", outer, inner); // 両方の変数にアクセス可能 } // println!("Inner: {}", inner); // エラー: innerはこのスコープでは無効 }
シャドーイング
Rustでは、同じ名前の変数を再度宣言することができます。これをシャドーイング(shadowing)と呼びます。
fn main() { let x = 5; let x = x + 1; // シャドーイング { let x = x * 2; // 内側のスコープで再度シャドーイング println!("Inner x: {}", x); // Inner x: 12 } println!("Outer x: {}", x); // Outer x: 6 }