Dev Study
← 解説「メソッド — impl ブロックと &self」に戻る

サンプルコードで身につける: メソッド — impl ブロックと &self

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1最小のメソッド

impl ブロックに &self を取る関数を1つ書いただけの、メソッドの最小例です。sq.area() というドット記法の呼び出しと、self.side によるフィールドアクセスの対応をまず確認してください。「データに振る舞いを添える」感覚はこの形がすべての出発点です。

Rust

21つの impl に複数のメソッド

同じ構造体に関するメソッドは、1つの impl ブロックにまとめて並べられます。面積と周の長さのように「同じデータから計算できる値」を1か所に集めると、ロジックの置き場所が明確になります。実務では構造体1つに対しメソッドが数個〜十数個並ぶのが普通です。

Rust

3&mut self で状態を変える

フィールドを書き換えるメソッドは &self ではなく &mut self で受けます。呼び出す側のインスタンスも let mut で宣言されている必要があり、可変参照のルールがメソッドにそのまま現れていることが分かります。カウンタやゲームのスコアなど「状態を進める」処理の典型形です。

Rust

4別のインスタンスを引数に取る

メソッドは self 以外の引数も取れます。この例では自分(self)と相手(other)という同じ型の2つのインスタンスを比較しています。「自分と他者の関係を調べる」メソッドは、衝突判定や包含チェックなど実務のロジックでよく登場します。

Rust

5業務ルールをメソッドに閉じ込める

「残高が足りるときだけ引き出せる」というルールを &mut self のメソッド内に閉じ込めた例です。フィールドの書き換えが必ずこのメソッドを通るようにすれば、不正な状態(残高がマイナスになる等)の入り込む場所を1か所に絞れます。実務でデータとルールを struct + impl にまとめる動機がこれです。

Rust