JavaScript の Plain Object (ただの) と、関数のみを利用して、Polymorphism を実現したい。
とはいえ Polymorphism の定義は人によって違うので、以下の仕様とルールを満たすものとしたい。
そもそもそれは Polymorphism ではない、あるいは意味をなさない、というような反論があればそれも歓迎。
- この世には Human と Dog の2種類の Animal が存在する。
- Animal はすべて age (年齢, 整数)というデータが紐づく。
- Animal からは normalizedAge という値が計算できる。
- Humanの場合、ageと等しい
- Dogの場合、ageの4倍である
- この世に存在する Animal データセットが与えられる
- JSON の配列である
- 配列の各要素はtype(種類)とageを持つ
- 上記のデータセットから、すべての Animal の normalizedAge の合計を出力せよ
- 結果は main 関数で出力する
- main 関数に if 文 (typeでの分岐)を書いてはいけない
- normalizedAge を計算する関数に if 文 (typeでの分岐)を書いてはいけない
- normalizedAgeにif文を書くということは、他の関数が追加されたときもそこにif文を書かなければならないことを意味する
- これは Polymorphism に反する
1_polymorphism.rb を参照のこと
TypeScript の例ですが、、、なるべく関数型っぽい感じ(immutable なシンプルなデータ構造と関数)に寄せるとしたならば、こういう感じになるかなと思います