@による束縛
キャプチャーとテスト
「@による束縛」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
@ バインド演算子
@ 演算子を使うと、値をパターンと照合しながら、同時に名前へバインドできます。検査と値の両方を取得できます。
解決する問題
範囲パターンを使うと値が範囲内にあることは分かりますが、その具体的な値にはアクセスできなくなります。@ を使えば、範囲を検査しながら値を取得できます。
@ による基本的なバインド
ここでは、範囲内の数値にマッチさせ、id を通してその正確な値を保持します。
fn main() {
let n = 5;
match n {
id @ 1..=5 => println!("got {id} in range"),
_ => println!("out of range"),
}
}@ を使わない場合
比較として、通常の範囲アームはマッチできますが、値に名前を付けられません。そのため、どの数値がマッチしたかを表示できません。
fn main() {
let n = 5;
match n {
1..=5 => println!("in range (value unknown here)"),
_ => println!("out of range"),
}
}列挙型のデータと @
フィールドをバインドしながら、同時に条件を付けられます。ここでは、id が有効な範囲にある場合にだけ取得します。
enum Message {
Hello { id: i32 },
}
fn main() {
let msg = Message::Hello { id: 7 };
match msg {
Message::Hello { id: id @ 3..=10 } => {
println!("valid id {id}");
}
Message::Hello { id } => {
println!("other id {id}");
}
}
}値全体のバインド
@ を使うと、ネストしたパターンで各部分を検査しながら、構造化された値全体をバインドすることもできます。
fn main() {
let point = (3, 4);
match point {
p @ (x, _) if x > 0 => println!("{:?} has positive x", p),
p => println!("{:?}", p),
}
}| との組み合わせ
複数の選択肢のパターンにまたがってバインドできます。名前は各選択肢の分岐に記述する必要があります。
fn main() {
let code = 404;
match code {
c @ (400 | 404 | 500) => println!("error code {c}"),
c => println!("code {c}"),
}
}if let での @
@ によるバインドは if let でも使えます。
fn main() {
let value = Some(50);
if let Some(n @ 1..=100) = value {
println!("in range: {n}");
}
}@ を使う場面
@ は、次の両方が必要な場合に使います。
- 範囲またはサブパターンで値を制限する
- アーム本体でその正確な値を使う
両方が必要でなければ、通常のバインドやパターンのほうが簡潔です。
可読性
形式は name @ pattern と読みます。pattern に一致した場合に name をバインドする、という意味です。意図が明確になるよう、説明的な名前を付けてください。
@ による分類
よくある用途は、値をラベル付きの区分に分類しながら、報告用に元の数値も保持することです。
fn classify(temp: i32) -> String {
match temp {
t @ ..=0 => format!("freezing ({t})"),
t @ 1..=20 => format!("cool ({t})"),
t @ 21..=30 => format!("warm ({t})"),
t => format!("hot ({t})"),
}
}
fn main() {
println!("{}", classify(25));
}確認問題
id @ 1..=5 のようなパターンで、@ 演算子は何をしますか?
まとめ
@ バインド演算子について学びました。
- 値を名前にバインドしながら、パターンとの一致を検査する
- 範囲パターンで値を失う問題を解決する
- 列挙型のデータ、タプル、
|による選択肢、if letで使える - 制約と値の両方が必要な場合に使う
よくある質問
「@による束縛」レッスンは無料ですか?
はい。「@による束縛」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「@による束縛」で何を学びますか?
キャプチャーとテスト ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「@による束縛」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。