Scala – ミックスインと継承の違い

Scalaを使ってある程度開発しているとタイトルに記載した問題にぶち当たります。

皆さん大好きのトレイトのミックスインとクラスorトレイトの継承どっちが良いのかということです。

まずは、双方のコードから。

トレイトのミックスイン

class(又は、trait)の継承

共に、同じextends…with…で継承(or ミックスイン)している。

一般的な使い分けとしては、継承classとミックスインしたいtraitがあれば、

extends 継承class名 with ミックスインtrain名

となり、特に継承するclassが無い場合は、

extends ミックスインtrain名 with その他ミックインtrain名…

となる。

恐らくプログラマの好きなようにすれば良いと思うが、個人的には…

abstract修飾子を付けずに継承というか正確にはミックスインだけど、するだけで、足りて無いものに気付けるのは楽かなぁと思ったりもする。

あとは、なるべくイミュータブルでなければならないという考え方がある。

よって、一度、型(この場合はtrait)を作れば足らないのがわかるのが個人的には良き。それと、classを大量に作るのはまとめ辛いので、各モジュール名をclass名にし、そのモジュールを成り立たせるための個々の機能をtraitで記述していくのが良いと思ったりもする。

この辺は、現場の人たちと話し合ってコーディング規約を作るのが吉。

以上、Scalaプログラマの変な人が送る、独り言でしたマル