#13 Rustで学ぶクラスの基本
Rustには他の言語のような「クラス」という単語は存在せず、代わりにstructとimplを組み合わせて似たようなことを表現します。この記事では、Rustにおけるクラスに相当する仕組みの基本を解説します。
structでデータを定義する
struct Person {
name: String,
age: u32,
}
structは、関連するデータをひとまとめにする仕組みです。
implでメソッドを追加する
データに対する処理(メソッド)は、implというブロックの中に書きます。
impl Person {
fn new(name: &str, age: u32) -> Person {
Person { name: String::from(name), age }
}
fn greet(&self) {
println!("こんにちは、{}です", self.name);
}
}
newのように、インスタンスを作るための関数は「関連関数」と呼ばれ、&selfを受け取らない点が、greetのような通常のメソッドとの違いです。
インスタンスを作って使う
let person = Person::new("太郎", 20);
person.greet();
Person::new(...)のように::で呼び出すのが関連関数、person.greet()のように.で呼び出すのがメソッド、という書き方の違いも押さえておきましょう。
traitで共通のふるまいを定義する
複数のstructに共通の機能を持たせたい場合は、他の言語のインターフェースに近い「trait」という仕組みを使います。
trait Greeting {
fn greet(&self);
}
impl Greeting for Person {
fn greet(&self) {
println!("こんにちは、{}です", self.name);
}
}
Rustならではの注意点
「データ(struct)」と「処理(impl)」が分離しているのは、クラスにデータとメソッドをまとめて書く他の言語とは大きく異なる考え方です。最初は戸惑うかもしれませんが、この分離が、Rustのコードの見通しの良さにつながっています。継承の代わりにtraitを使う設計も、他の言語のオブジェクト指向とは異なるRust特有の考え方なので、少しずつ慣れていきましょう。
まとめ
Rustではstructでデータを、implでメソッドを定義します。traitで共通のふるまいも表現でき、他の言語の「クラス」とは違う考え方ですが、組み合わせることで似たようなことが実現できます。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿