クラスとデータ型の分離

クラスとデータ型を分離させてみた

シンプルなアイデアなので、ここにメモ。オブジェクト指向プログラミングのクラスと、データ型を分離させてみようという考えで、あまり、難しいことはしない

疑似コードで以下のとおり、書いてみた

疑似コード

class List (x) {
  getItem: Number -> x {...},
  addItem: x -> this {...}
}

var StringList = new List(String);

StringList obj;
obj.addItem("hoge");
obj.getItem(0);      //"hoge"を返す

上記のコードを説明すると、objはStringList型で、obj.getItem(0)で、String型の文字列"hoge"を返す。ただし、{...}は内部実装を省略したもの。本来はnewの時点で実装しないとまずい

今度は、String型ではなく、Number型を使って、NumberList型を生成してみよう

var NumberList = new List(Number);

NumberList obj2;
obj2.addItem(12);
obj2.getItem(0);      //12を返す

クラスの引数xには、Number型が入るので、addItemメソッドは「Number -> NumberList」に、getItemメソッドは「Number -> Number」となるわけ。かなり単純