trait
「trait」の意味
「trait」とは、個人の特徴や性格を表す言葉である。特に、遺伝的または環境的要因によって形成された個性的な特徴を指すことが多い。例えば、勇敢さや誠実さなどの性格的特徴や、美術の才能や音楽の才能などの能力的特徴が該当する。「trait」の発音・読み方
「trait」の発音は、IPA表記では /treɪt/ であり、IPAのカタカナ読みでは「トレイト」となる。日本人が発音するカタカナ英語では「トレイト」と読むことが一般的である。「trait」の定義を英語で解説
A trait is a distinguishing quality or characteristic, typically belonging to a person, that can be inherited or acquired through environmental factors. It can refer to both personality traits and abilities or talents.「trait」の類語
「trait」の類語には、characteristic(特徴)、attribute(属性)、quality(質)、feature(特色)などがある。これらの言葉は、個人の特徴や性格を表す際に使われるが、ニュアンスや使い方には若干の違いがある。「trait」に関連する用語・表現
「trait」に関連する用語や表現には、personality trait(性格的特徴)、genetic trait(遺伝的特徴)、inherited trait(遺伝的に受け継がれた特徴)、acquired trait(環境的要因で獲得した特徴)などがある。「trait」の例文
1. Honesty is an admirable trait.(正直さは称賛に値する特徴である。)2. She has a genetic trait for artistic talent.(彼女は美術の才能を持つ遺伝的特徴を持っている。)
3. His sense of humor is one of his most attractive traits.(彼のユーモアのセンスは、彼の最も魅力的な特徴の一つである。)
4. The acquired trait of perseverance helped her succeed in her career.(環境的要因で獲得した忍耐力という特徴が彼女のキャリアで成功するのを助けた。)
5. Genetic traits can be passed down from one generation to the next.(遺伝的特徴は世代から世代へと受け継がれることがある。)
6. She has a unique trait of being able to remember every detail of a conversation.(彼女は会話のあらゆる細部を覚えていられるという独特の特徴を持っている。)
7. His leadership traits were evident from a young age.(彼のリーダーシップの特徴は若い頃から明らかであった。)
8. The study of human traits can help us understand human behavior better.(人間の特徴の研究は、人間の行動をより理解するのに役立つ。)
9. Some traits are more dominant than others in a person's personality.(ある特徴は、人の性格の中で他の特徴よりも優位であることがある。)
10. Environmental factors can influence the development of certain traits.(環境的要因は、特定の特徴の発達に影響を与えることがある。)
トレイト
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/09/13 03:00 UTC 版)
トレイト (英: Trait) は、コンピュータープログラミングでの概念であり、専らオブジェクト指向プログラミングで用いられている。トレイトはメソッドの集合体であり、クラスの機能を拡張するために使われる[1][2]。
特徴
トレイトは、(1)自身が定義+実装しているメソッドを継承先クラスに注入する役割と、(2)自身が定義だけしているメソッドを継承先クラスに叙述してそこで実装させる役割の双方を持っている。定義=メソッドシグネチャ、実装=メソッドコードである。トレイトの継承は、インクルードと言われることが好まれるがそうでない言語もある。トレイトのインクルードを扱う作法はミックスイン(mixin)と言われることが多いがそうでない言語もある。なお、ミックスインでもトレイトを扱っていない言語もある。
トレイトは2000年代にSmalltalk方言のSqueakで最初に実装が試されてから、各言語で様々な形態に解釈されて導入されている。トレイトは多重継承されることから、同様の機能であるインターフェースとよく対比されて説明される。インターフェースとの違いは以下のようになる。
- インターフェースがメソッドシグネチャのみを持つのに対して、トレイトはメソッド(定義+実装)とメソッドシグネチャの双方を持ち、またデータメンバを持つこともある。
- インターフェースはサブタイピングでクラスに継承させるのに対して、トレイトはサブタイピングでクラスに継承させるか、アドホック多相でクラスにインクルードさせるの二通りに分かれる。
- インターフェースは記名的型付けで識別されるのに対し、トレイトは構造的型付けで識別されることが多い。
トレイトは合成(union)と交差(intersection)ができる。これも大きな特徴である。
- トレイトの合成は交換法則が成り立つ。即ち
S = A + B
とT = B + A
としてのS
とT
は同型トレイトと判定される。 - トレイトの合成は平坦化される。即ち
X = B + C
としてS = A + X
とし、またT = A + B + C
とすると、S
とT
は同型トレイトと判定される[3]。
また、専用の書式でメソッドを列挙しての”その場トレイト”を作成できる言語もある。”その場トレイト”は構造型(structural type)とも呼ばれており、合成と交差に利用できる。
トレイトは任意の数だけクラスに継承/インクルードさせることができる。ここでクラスの多重継承と同様に名前衝突や菱形継承問題が発生するが、それをより柔軟に解決できる方法をトレイトは備えている。それは以下のようなものである。
- 対称和(symmetric sum)- トレイトは合成できるので、多重継承を”その場合成トレイト”に置換できる。
- 非対称和(override / asymmetric sum)- トレイトのメソッドを継承/インクルード先のメソッドでオーバーライドして、メソッド実体を任意に入れ替えることができる。
- 別名化(alias)- 各メソッドをリネームした”その場トレイト”を継承対象に置換できる。
- 排除(exclusion)- トレイトは交差できるので、必要メソッド群を切り抜いて不要メソッド群を除外した”その場トレイト”を多重継承に置換できる。
冒頭で述べた通り、トレイトはメソッドの集合体なので、合成と交差と構造型を用いての要素メソッドの自由な組み替えによって多重継承問題に対応できる。
導入している言語
トレイトを採用
- Smalltalk - 最初のトレイトは Smalltalk 処理系のひとつである Squeak を使ってベルン大学のソフトウェア合成グループによって実装が試され[4]、その有効性が実証された[5]。Squeak にはその後、公式リリースにもトレイトが組み込まれ標準で利用可能となった。Squeak から派生した Pharo も同様。
- PHP - 5.4.0 からサポート[6]。
- Raku -「ロール」。Perl 5 では Moose モジュールで利用可能。なおロールの限定的な用途のみ「トレイト」と呼称し紛らわしい。
- JavaScript の Joose フレームワーク
- Ruby のモジュールのmix拡張(試作のみ)[7] - Ruby 2.0 向けの新機能として計画された[8]が運用上の問題が見つかり放棄された[9]。
トレイトの類似品/派生品を採用
- Racket - エンティティとしてのトレイトは無いが、ミクスインをトレイトのように振る舞わせる関数やマクロが整備されている。
- Curl - 抽象クラスを多重継承することでトレイトを実現することができる。
- Swift - protocol、extensionを利用することでトレイトを実現することができる[10]。
- Rust - トレイトを有し、型変数に対する制約をトレイトで指定したり、ユーザー定義型の演算子に対する振る舞いを設定するのに利用されるが、その運用に際しそもそも衝突を許さないので(Orphan rule)、メソッドの集合という意味を除きSchärliの想定した使われ方はされず、トレイトとしては別物(実装の記述できるインタフェース程度)と考える方が良い。
Rustの他にもトレイトと称する言語機能を有する静的型言語もあるが、その本質は従来のミクスインのままである(平坦化されない)。ただし平坦なトレイトを模したりミクスインの問題点を回避する拡張を施すなどの工夫により、トレイトに近い使い勝手を実現している場合もある。
脚注
- ^ Nathanael Schärli、Stéphane Ducasse、Oscar Nierstrasz、Andrew P. Black 共著、Traits: Composable Units of Behaviour. Proceedings of the European Conference on Object-Oriented Programming (ECOOP). Lecture Notes in Computer Science 誌、2743巻、Springer-Verlag、2003年、pp. 248-274
- ^ Stéphane Ducasse、Oscar Nierstrasz、Nathanael Schärli、Roel Wuyts、Andrew P. Black 共著: Traits: A mechanism for fine-grained reuse. ACM Trans. Program. Lang. Syst. 誌、28(2): 331-388 (2006)
- ^ Schärli, Nathanael; Ducasse, Stéphane; Nierstrasz, Oscar; Black, Andrew P. (2003). “Traits: Composable Units of Behaviour”. Proceedings of the European Conference on Object-Oriented Programming (ECOOP).. Lecture Notes in Computer Science 2743: 248–274 .
- ^ Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, and Andrew P. Black. Traits: Composable Units of Behavior. Technical Report -2, Institut für Informatik, Universität Bern, Switzerland, November 2002
- ^ Andrew P. Black, Nathanael Schärli, and Stéphane Ducasse. Applying Traits to the Smalltalk Collection Hierarchy. Technical Report -2, Institut für Informatik, Universität Bern, Switzerland, November 2002
- ^ Marr, Stefan. “Request for Comments: Horizontal Reuse for PHP”. The PHP.net wiki. The PHP Group. 2011年1月31日閲覧。
- ^ http://marc.info/?l=ruby-cvs&m=130685857122161
- ^ http://www.rubyist.net/~matz/20100617.html
- ^ https://ruby-trunk-changes.hatenablog.com/entry/20111003/ruby_trunk_changes_33379_33380
- ^ “Mixins and Traits in Swift 2.0”. 2022年2月10日閲覧。
- ^ http://www.scala-lang.org/node/126 A Tour of Scala: Traits
- ^ http://www.ibm.com/developerworks/java/library/j-scala04298.html The busy Java developer's guide to Scala: Of traits and behaviors
- ^ http://docs.groovy-lang.org/next/html/documentation/core-traits.html Groovy Language Documentation
関連項目
外部リンク
- http://www.iam.unibe.ch/~scg/Research/Traits/
- http://traitsjs.org traits.js - Traits for JavaScript
「トレイト」の例文・使い方・用例・文例
- トレイトのページへのリンク