◾️はじめに
Rust を少しずつ触っているが、 Rustには class がないことを知ったので 掘り下げてみた
目次
【0】Rustには class がない
1)Rust でのオブジェクト指向
2)補足:AIに「Classがないのは流行り?」って聞いてみた
【1】struct
1)サンプル
【2】impl
1)サンプル
2)ジェネリックを使った場合
【3】trait
1)impl トレイト名 for 型名 {}
【0】Rustには class がない
* (Go もそうだが)Rustには class がない
1)Rust でのオブジェクト指向
* Rustでは、代わりに以下を使って、実装する + struct + impl + trait による追加機能 ... 継承禁止(安全性確保)
struct + impl + trait
trait Greet { fn greet(&self); } struct Person { name: String, } impl Greet for Person { fn greet(&self) { println!("Hello, {}!", self.name); } } fn main() { let p = Person { name: "Mike".into() }; p.greet(); }
2)補足:AIに「Classがないのは流行り?」って聞いてみた
ChatGPTに 「GoやRustにはClassがないですが、最近の流行りですか?」 って聞いてみた
回答抜粋
結論から言うと、Go や Rust に「class がない(または class を中心にしない)」 のは “最近の流行り” というより、「現代的言語設計の方向性」 です。 1. 「class = 複雑な継承」を避けたい 2. class がなくても OOP 的な書き方ができる 3. コンポジション(構造を組み合わせる)が主流に 近年のトレンドであることは間違いない Rust(2015〜) Go(2009〜) Swift(2014〜) TypeScript でも class 継承より interface×struct-like design へ Python も近年 dataclass や pydantic などで「構造体的」設計が普及 多くの新しい言語が 「伝統的 OOP(class + 継承)」の弱点を補う方向に シフトしています。
【1】struct
* C言語のstruct(構造体)と同じ => データのグループを定義
1)サンプル
struct User { id: u32, name: String, age: u8, sex: char, is_active: bool, updated_at: DateTime<Utc>, create_at: DateTime<Utc>, }
【2】impl
* 構造体などの型にメソッドを追加するために使用
https://doc.rust-jp.rs/rust-by-example-ja/generics/impl.html
1)サンプル
struct Point { x: u32, y: u32, } impl Point { fn x(&self) -> u32 { self.x } fn y(&self) -> u32 { self.y } } fn main() { let point = Point { width: 30, height: 50 }; println!("Result: {}", point.x()); }
2)ジェネリックを使った場合
struct Val <T> { val: T, } // impl of Val for a generic type `T` // ジェネリック型`T`の場合のメソッドをValに対して実装 impl<T> Val<T> { fn value(&self) -> &T { &self.val } } fn main() { let x = Val { val: 3i32 }; println!("{}", x.value()); }
【3】trait
* Scala などのTrait(トレイト)と同じ => 共通の振る舞いを定義する
https://doc.rust-jp.rs/book-ja/ch10-02-traits.html
https://doc.rust-jp.rs/rust-by-example-ja/trait/impl_trait.html
1)impl トレイト名 for 型名 {}
trait UserAction { fn greet(&self) -> String; } struct User { id: u32, name: String, } impl UserAction for User { fn greet(&self) -> String { format!("Hello, {}", self. name) } }
関連記事
Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ enum / 列挙型 ~
https://dk521123.hatenablog.com/entry/2025/12/03/000831
Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726
Rust ~ mod ~
https://dk521123.hatenablog.com/entry/2025/11/29/221911
Rust ~ Option型 ~
https://dk521123.hatenablog.com/entry/2025/12/01/223443