12章演算子オーバーロード
2章で示したマンデルブロ集合を描画するプログラムでは、num
クレートのComplex
型を使って、複素平面上の数値を表現した。
#[derive(Clone, Copy, Debug)] struct Complex<T> { /// Real portion of the complex number 複素数の実部 re: T, /// Imaginary portion of the complex number 複素数の虚部 im: T }
そこでは、Complex
値を組み込みの数値型と同様に、+
、*
演算子を使って、足したり掛けたりすることができていた。
z = z * z + c;
独自の型に対しても算術演算などの演算をサポートすることができる。これにはいくつかの組み込みトレイトを実装すればよい。この機能は演算子オーバーロード(operator overloading)と呼ばれ、C++やC#、Python、Rubyの演算子オーバーロードとほぼ同じ効果を持つ。
演算子オーバーロードに用いるトレイトは、それがサポートする言語機能によって、いくつかのカテゴリに分類することができる。表12-1にこれを示す。本章ではこれらのカテゴリを1つずつ見ていく。本章の目的は、読者が自分で定義した型を言語によりよい形で統合できるようにするとともに、「11.5 制約のリバースエンジニアリング」で示したドット積のように、演算子を使って書いた方が自然な演算をジェネリック関数で書く方法を理解してもらうことだ。また、本章を読むことで、言語自身の機能がどのように実装されているかがある程度理解できるようになるはずだ。
Get プログラミングRust 第2版 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.