本文へスキップ

トレイトとは?

とれいと

レイトとは、クラスの継承関係とは独立してメソッドやプロパティを定義・再利用できる、オブジェクト指向プログラミングのコードの再利用機構です。

レイト(Trait)は、複数クラスが共有できるメソッド集合定義する機構です。クラスの継承(is-a 関係)とは異なり、振る舞いの単位を柔軟に組み合わせる「ミックスイン」の一形態として機能します。

プログラミング言語によってトレイトの意味は少し異なります。

  • PHP:単一継承の制約を補うために導入された。use キーワードでクラスにトレイトを取り込み、メソッドを「コピーして貼り付ける」形で再利用します。複数のトレイトを組み合わせることができます。
  • Rust:型が実装すべき振る舞いのインターフェースを定義するもので、型クラスに近い概念です。既存の型に後からトレイトを実装でき(オーファンルール制限あり)、ジェネリクスの境界指定にも使います。
  • Scala:抽象メソッドとデフォルト実装の両方を持てるインターフェースの拡張版。多重継承の問題を線形化アルゴリズムで解決しています。

トレイトの主な利点は、コードの重複を排除しながら単一継承の制約を回避できる点、そして関心事を小さな単位に分離できる点にあります。一方で複数のトレイトで同名メソッドが衝突した場合の解決が必要になります。

関数型言語の型クラスと概念的に重なる部分が多く、近年の多くのプログラミング言語に採用されています。

使い方・例文

PHPでは、ログ出力機能を Loggable トレイトとして定義し、複数のクラスで use Loggable; と記述するだけで同じロジックを共有でき、継承ツリーを複雑にせずに済みます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語