分解
構造体、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フィードバックを取得できます。ローカル設定は不要です。