0Pricing
Learn Rust Coding · レッスン

分解

構造体、enum、タプル

「分解」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

デストラクチャリングとは

デストラクチャリングは、パターンを使って複合的な値を構成要素に分解します。タプル、構造体、列挙型、配列などで使えます。

タプルのデストラクチャリング

1つの let で、タプルの各要素をそれぞれの変数にバインドできます。

fn main() {
    let point = (3, 7);
    let (x, y) = point;
    println!("x = {x}, y = {y}");
}

タプルの一部を無視する

_ で1つの値を、.. で複数の値をスキップします。

fn main() {
    let data = (1, 2, 3, 4);
    let (first, .., last) = data;
    println!("{first} ... {last}");
}

構造体のデストラクチャリング

構造体のフィールドを名前で取り出します。バインドする変数名はフィールド名と同じにも、別名にもできます。

struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let p = Point { x: 10, y: 20 };
    let Point { x, y } = p;
    println!("{x}, {y}");
}

フィールド名の変更

field: new_name を使うと、構造体のフィールドを別の変数名にバインドできます。

struct Config {
    width: u32,
    height: u32,
}

fn main() {
    let c = Config { width: 800, height: 600 };
    let Config { width: w, height: h } = c;
    println!("{w} x {h}");
}

構造体フィールドの無視

.. を使うと、必要のない残りのフィールドを無視できます。

struct User {
    name: String,
    age: u32,
    active: bool,
}

fn main() {
    let u = User { name: "Ada".into(), age: 36, active: true };
    let User { name, .. } = u;
    println!("{name}");
}

列挙型のデストラクチャリング

match では、列挙型のバリアントをデストラクチャリングして、データを取り出せます。

enum Event {
    Click { x: i32, y: i32 },
    Key(char),
}

fn main() {
    let e = Event::Click { x: 5, y: 8 };
    match e {
        Event::Click { x, y } => println!("click at {x},{y}"),
        Event::Key(c) => println!("key {c}"),
    }
}

パラメーターでのデストラクチャリング

関数パラメーターは直接デストラクチャリングできます。タプルや小さな構造体に便利です。

fn distance((x1, y1): (f64, f64), (x2, y2): (f64, f64)) -> f64 {
    ((x2 - x1).powi(2) + (y2 - y1).powi(2)).sqrt()
}

fn main() {
    println!("{}", distance((0.0, 0.0), (3.0, 4.0)));
}

ネストしたデストラクチャリング

パターンは自由に入れ子にできるため、1つの手順で構造の深い部分まで取り出せます。

struct Line {
    start: (i32, i32),
    end: (i32, i32),
}

fn main() {
    let line = Line { start: (0, 0), end: (4, 5) };
    let Line { start: (sx, sy), end: (ex, ey) } = line;
    println!("from {sx},{sy} to {ex},{ey}");
}

配列とスライスのデストラクチャリング

配列とスライスもデストラクチャリングできます。.. を使って中央部分を取得することも可能です。

fn main() {
    let arr = [1, 2, 3, 4, 5];
    let [first, .., last] = arr;
    println!("first {first}, last {last}");
}

for ループでのデストラクチャリング

for ループでもデストラクチャリングできます。値のペアを反復処理するのに最適です。

fn main() {
    let pairs = [("a", 1), ("b", 2), ("c", 3)];
    for (label, value) in pairs {
        println!("{label} = {value}");
    }
}

確認問題

構造体をデストラクチャリングするとき、残りのフィールドを無視するにはどうしますか?

まとめ

デストラクチャリングについて学びました。

  • タプル、構造体、列挙型、配列、スライスを分解できる
  • field: name でフィールド名を変更できる
  • _ と .. で部分を無視できる
  • let、match、関数パラメーターでデストラクチャリングできる
  • パターンを入れ子にして深い部分を取り出せる

よくある質問

「分解」レッスンは無料ですか?

はい。「分解」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「分解」で何を学びますか?

構造体、enum、タプル ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「分解」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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