第8章へようこそ。
今日のテーマは「トレイト」です。
第6章で構造体とenumを扱いました。
構造体はデータの形を定義し、implブロックでメソッドを付けた。
しかし、あのメソッドは特定の構造体にしか使えない。
構造体Aに定義したメソッドは、構造体Bには使えない。
ここで疑問が生まれます。
異なる型が同じ操作を持つことを、どう表現するのか。
たとえば、文字列として表示するという操作は、整数にも浮動小数点数にも構造体にも欲しい。
しかし、それぞれの型で表示のやり方は違う。
整数なら数字の列に変換する。浮動小数点数なら小数点を含む形に変換する。構造体ならフィールドを順に並べる。
操作の名前は同じだが、実装は型ごとに違う。
この「共通の操作名」と「型ごとの実装」を分離する仕組みが、トレイトです。
トレイトはRustの型システムの中核にある概念です。
今日はトレイトが何を解決し、どう機能するかを、構造から見ていきます。