世界が幸せで在ります様に

ITエンジニアになりたい人・エンジニアの人にとって役立ちそうな商品を紹介するブログ

Traitについて徒然;part1

Trait
様々な言語で使われるが、意味合いが異なるので新しい言語でこの言葉を聞く時は注意したい。
僕の最初のイメージでは、継承ではなく、コンポジション。

 

Wikipediaによると、Smalltalkがトレイトの始まりであるらしい。同じ意味合いでは、PHPなどでも用いる。

 

また、上記の言語とは意味合いが異なってくるのがRustやScalaなどである。


僕は、昔Scalaを書いていた時、Traitは多重継承できないから存在していると思っていた。1つのクラスで1つの継承しかできない言語が、複数のクラスの機能を使いたいときに、トレイトを使っていた。多重継承するため、というよりは、ミックスインという言い方が正しい。
Javaとは違って、Javaだとinterfaceを作って、そのimplementsクラスで実際の処理を書いていくことになるが、Scalaの場合、Traitにそのまま実装することができる。Javaの1.8以降はinterfaceでもデフォルトメソッドを持つことが可能になってはいるが、正直既存のプロジェクトではあまりそんなコードは見たこと無い。多分今までの書き方が板につきすぎて新しい書き方に以降しづらいのかな?という感覚。

Rustの場合、利用するときは、厳密に使う側のスコープでインポートする必要があるため、許可されていない呼び出しはなくなる。

 

それについて書かれていたので、ちょっと読んでおきたい。 

willcrichton.net

https://doc.rust-lang.org/book/second-edition/ch10-02-traits.html

プロフィールと免責事項