見出し画像

Rust デストラクトとは 使い方と注意点について

Rustの「デストラクト」は、構造体やタプルなどの複合データ型を解体して、個々の要素を取り出す操作です。

デストラクトを使うことで、パターンマッチングや構造体の内容へのアクセスが容易になります。


デストラクトの使い方

タプルのデストラクト

タプルはデストラクトして個々の要素を取り出すことができます。

let point = (10, 20, 30);

let (x, y, z) = point;
println!("x: {}, y: {}, z: {}", x, y, z);

タプルpointをデストラクトして、それぞれの要素をx、y、zに割り当てています。


構造体のデストラクト

構造体も、デストラクトしてフィールドの内容を取り出すことができます。

struct Person {
    name: String,
    age: u32,
}

let person = Person {
    name: String::from("Alice"),
    age: 30,
};

let Person { name, age } = person;
println!("Name: {}, Age: {}", name, age);

構造体Personをデストラクトして、nameとageフィールドを取り出しています。


デストラクトとパターンマッチング

デストラクトは、match文やif let構文など、パターンマッチングにおいても使用することができます。

match文でのデストラクト

match文を使って複合データ型をデストラクトし、その内容に基づいて条件分岐を行うことができます。

enum Shape {
    Circle(f64),
    Rectangle(f64, f64),
}

let shape = Shape::Rectangle(10.0, 20.0);

match shape {
    Shape::Circle(radius) => println!("Circle with radius {}", radius),
    Shape::Rectangle(width, height) => println!("Rectangle with width {} and height {}", width, height),
}

Shapeというenumをデストラクトして、それぞれのバリアントに基づいて条件分岐を行っています。


if let構文でのデストラクト

if let構文を使ってパターンに基づいて条件分岐を行う際にデストラクトが使えます。

let value = Some(10);

if let Some(x) = value {
    println!("The value is {}", x);
} else {
    println!("No value");
}

Option型のSomeバリアントをデストラクトして、内部の値を取り出しています。


注意点

パターンの精密さ

デストラクトは、正確なパターンに基づいて行われるため、フィールド名やタプルのインデックスを正確に指定する必要があります。
間違ったパターンを指定すると、意図しない結果が発生する可能性があります。


可変性と所有権

デストラクトによって、所有権が移動する場合があります。
デストラクトした変数が可変であるか不変であるかを確認し、所有権のルールに従うことが必要です。


デストラクトによる変数の上書き

デストラクトによって変数が上書きされる可能性があります。
同じスコープ内で変数を再定義する際には、シャドーイングや意図しない上書きに注意が必要です。


Rustをもっと詳しくなりたい方に

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!

個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。

Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。


基礎から学ぶRustプログラミング入門

本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています

この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?