シャドーイング
変数の再束縛
「シャドーイング」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
シャドーイングとは
シャドーイングとは、前に宣言した変数と同じ名前で新しい変数を宣言することです。新しい束縛が古い束縛を「隠します」。
同じ名前でletを繰り返し使用することで行います。
fn main() {
let x = 5;
let x = x + 1;
let x = x * 2;
println!("x is {}", x);
}シャドーイングはミューテーションではない
シャドーイングでは、まったく新しい変数が作成されます。これは、同じ変数を再利用するmutとは異なります。
それぞれのletが新しい束縛になるため、値の型を変えることもできます。
fn main() {
let y = 10; // immutable
let y = y + 5; // new binding, also immutable
println!("y is {}", y);
}シャドーイングによる型の変更
シャドーイングの強力な使い方の1つは、名前を維持したまま型を変更することです。
ここでは、同じ名前のまま文字列を数値にパースしています。
fn main() {
let spaces = " ";
let spaces = spaces.len();
println!("count is {}", spaces);
}mutで型を変更できない理由
mutでは値を変更できますが、型は変更できません。
次のコードはコンパイルに失敗します。
let mut spaces = " ";spaces = spaces.len();— 型の不一致エラーです。
シャドーイングでは新しい変数を作成するため、この問題を回避できます。
fn main() {
let mut count = 3;
count = 4; // ok, same type
println!("{}", count);
}内部スコープでのシャドーイング
内部ブロック内で変数をシャドーイングできます。ブロックが終了すると、外側の束縛が再び見えるようになります。
fn main() {
let n = 1;
{
let n = n * 10;
println!("inner {}", n);
}
println!("outer {}", n);
}段階的な変換
シャドーイングを使うと、1つの分かりやすい名前を維持したまま、値を複数の段階にわたって変換できます。
fn main() {
let input = "42";
let input: i32 = input.trim().parse().unwrap();
let input = input * 2;
println!("result {}", input);
}シャドーイングで不変性を維持する
シャドーイングされた各束縛は不変のままです。変換後も、x2やx_tempのような新しい名前を作らずに、不変性による安全性を維持できます。
fn main() {
let price = 100;
let price = price - 20; // discount applied
let price = price + 5; // shipping added
println!("final price {}", price);
}異なるロジックでのシャドーイング
関数呼び出しや式を含め、どのような方法でも新しい値を計算できます。
fn main() {
let text = "hello";
let text = text.to_uppercase();
println!("{}", text);
}混乱を避ける
シャドーイングは便利ですが、使いすぎると読み手を混乱させることがあります。同じ概念を明確に変換する各段階で使用し、単に名前を無作為に使い回す目的では使用しないでください。
fn main() {
let raw = " Rust ";
let raw = raw.trim(); // clean version
println!("[{}]", raw);
}シャドーイングと再代入のまとめ
名前に新しい値を与える方法は2つあります。
- シャドーイング:
let x = ...;をもう一度記述します。新しい変数になり、型を変更でき、不変のままです。 - 再代入:
mutを付けてx = ...;と記述します。同じ変数なので、同じ型である必要があります。
fn main() {
let val = "7";
let val: i32 = val.parse().unwrap(); // shadow + type change
let mut val = val;
val += 1; // reassign, same type
println!("{}", val);
}実践的な例
ユーザーデータの読み取りと変換は、シャドーイングがよく使われる典型的な場面です。型がテキストから数値に変わっても、意味のある名前ageを維持できます。
fn main() {
let age = "25";
let age: u32 = age.parse().unwrap();
let age = age + 1; // next birthday
println!("next year you will be {}", age);
}理解度チェック
シャドーイングとmutの違いを確認しましょう。
まとめ
Rustのシャドーイング:
- 同じ名前で
letを繰り返すと、新しい束縛が作成されます。 - 新しい束縛には、異なる型を指定できます。
- シャドーイングされた各値は不変のままです。
- 同じ変数を変更し、その型を維持する
mutとは異なります。
fn main() {
let data = "100";
let data: i32 = data.parse().unwrap();
let data = data / 4;
println!("final {}", data);
}よくある質問
「シャドーイング」レッスンは無料ですか?
はい。「シャドーイング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「シャドーイング」で何を学びますか?
変数の再束縛 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「シャドーイング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。