見出し画像

Rust 構造体/structsの使い方と注意点について

Rustの構造体/structsは関連するデータをまとめて一つの単位として扱うためのカスタムデータ型です。
構造体を使用することで、異なるデータピースを一つのグループにまとめ、のデータの管理を容易にすることができます。


構造体の使い方

定義方法

構造体は以下のように定義します。

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

Person という名前の構造体を定義しており、String 型の name と u32 型の age という二つのフィールドを持っています。


インスタンスの生成

構造体のインスタンスを生成するには、以下のように記述します。

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


フィールドへのアクセス

構造体のフィールドにアクセスするには、ドット(.)を使用します。

println!("Name: {}, Age: {}", person.name, person.age);


注意点

イミュータビリティ

Rustの構造体はデフォルト不変です。
フィールドの値を変更する場合は、構造体のインスタンスをmutとして宣言する必要があります。

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


所有権と借用

構造体が所有権を持つデータを含む場合、その構造体を他の関数やスレッドに渡すと所有権が移動します。
データを共有するには参照を使用し、ライフタイムを明示する必要があります。


データの初期化

構造体の全てのフィールドはインスタンスが生成される前に初期化されている必要があります。
一部のフィールドのみを初期化し、他を未初期化のままにすることはできません。


派生トレイト

構造体で便利なトレイト(Debug, Clone, Copyなど)を使いたい場合、それらを明示的に導出する必要があります。

#[derive(Debug, Clone, Copy)]
struct Point {
    x: i32,
    y: i32,
}



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

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

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

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


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

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

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

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


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

#この経験に学べ

53,917件

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