-
トレイトを使用したポリモーフィズム: Rustでは、トレイトを使用してポリモーフィズムを実現します。トレイトは、メソッドのシグネチャの集合であり、オブジェクトがどのようなメソッドを持つべきかを定義します。例えば、以下のようなトレイトを定義することができます。
trait Animal { fn sound(&self); }
このトレイトを実装する構造体や列挙型は、
sound
メソッドを実装する必要があります。これにより、異なる種類の動物を表すオブジェクトが、共通のsound
メソッドを持つことが保証されます。 -
ジェネリックを使用したポリモーフィズム: Rustでは、ジェネリックを使用してポリモーフィズムを実現することもできます。ジェネリックは、異なる型に対して同じコードを適用するための仕組みです。例えば、以下のようなジェネリックな関数を定義することができます。
fn print_value<T>(value: T) { println!("Value: {}", value); }
この関数は、任意の型
T
の値を受け取り、それを表示します。このようなジェネリックな関数を使用することで、異なる型の値を同じ関数で処理することが可能となります。 -
ダイナミックディスパッチを使用したポリモーフィズム: Rustでは、ダイナミックディスパッチを使用してポリモーフィズムを実現することもできます。ダイナミックディスパッチは、実行時にオブジェクトの型を判断し、適切なメソッドを呼び出す仕組みです。これにより、実行時に異なる型のオブジェクトを同じコードで処理することができます。以下は、ダイナミックディスパッチを使用した例です。
trait Shape { fn area(&self) -> f64; } struct Rectangle { width: f64, height: f64, } impl Shape for Rectangle { fn area(&self) -> f64 { self.width * self.height } } fn print_area(shape: &dyn Shape) { println!("Area: {}", shape.area()); } fn main() { let rectangle = Rectangle { width: 10.0, height: 5.0, }; print_area(&rectangle); }
上記の例では、
Shape
トレイトを実装するRectangle
構造体を定義し、`print_area
関数に&dyn Shape
型の引数として渡しています。これにより、実行時にRectangle
オブジェクトの型を判断し、area
メソッドを呼び出すことができます。
これらは、Rustにおけるポリモーフィズムの基本的な概念と使用方法の一部です。ポリモーフィズムを活用することで、柔軟なコードの設計と再利用性の向上が可能となります。さらに、トレイトやジェネリック、ダイナミックディスパッチを組み合わせて使うことで、さまざまなポリモーフィックな振る舞いを実現することができます。
以上が、Rustにおけるポリモーフィズムの概念と使用方法についての解説です。コード例を通じて具体的な使い方を理解し、より効果的なプログラミングを行ってください。