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 制約のリバースエンジニアリング」で示したドット積のように、演算子を使って書いた方が自然な演算をジェネリック関数で書く方法を理解してもらうことだ。また、本章を読むことで、言語自身の機能がどのように実装されているかがある程度理解できるようになるはずだ。

表12-1 演算子オーバーロードに用いるトレイトのまとめ ...

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.