class の引数をずらずらーと書きたくないでござる!
そもそもこういう事で悩むのすら間違ってる感はありますが、とりあえず困ってることをまとめる意味も込めてブログに書いてみる。
ちなみに僕の設計力はやう゛ぁいんで!!なんでこういう作りなの?っていうマサカリどんどん投げてくれると助かりマンモス!!
簡単な例
チワワは犬で、犬は動物みたいなクラス設計です。んで遺伝子を引数として渡す的なノリで。
これ僕がオブジェクト指向始めてからずっと悩みの種なんですが、根底クラスに引数がある場合、
今回は一つですけど、これが大量にある場合。継承する度に引数書くのだけでも一苦労みたいな感じでいつもぐぬぬしてました。
trait or abstract class にして最後に定義する。
trait にすると、継承の時に地獄のようなパラメーター渡しをしなくてよくてマンモスウレピー!
大事なことなので二回いいますが、今回は簡単な例なので引数は少ないですが、これがどんどん増えていくと地獄になるんです!
ここでまず疑問なんですが、これってお作法的にいいんですかね?
cloneable にする
いきなりなんで脈絡もなく cloneable の話になるの?と思われるでしょうが、僕が困ってることなので仕方ないのです!というわけで cloneable にしてみます。(強引)
こんな感じになりました。ここまでで疑問が二つほどありました。
- そもそも scala でこういう形が必要になる時点でどこか間違っているのだろうか?
- この性能を満たすもっとエレガントな方法はないんだろうか?
case class でなんややろうとしたんですが難しかったです!!
そもそもこういう継承しまくる時でも case class を使ってもいいのだろうか?(なんか色々やってるとたまに Warning が出る;ω;)
ちなみにブログの方はサンプルですが実際のコードで困ってるのはここらへんです。
https://github.com/alphaneet/suparobo-engine/commit/57531d8390b0068dff880c36763ebfe04f8b0a39#L1R63