#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本