0Pricing
Learn Rust Coding · レッスン

@による束縛

キャプチャーとテスト

「@による束縛」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. match徹底解説
  2. if letとwhile let
  3. @による束縛
  4. 分解
← Learn Rust Codingに戻る