osiire’s blog

ふしぎなそふとやさん

追記

id:camlspotter氏に、オブジェクト使わないのは一般的で理由のある話なので誤解ではない、とのコメント頂きました。ありがとうございます。なんかもうオブジェクト有用前提みたいな気分だったので、勢いで書いてしまいました。JSCの方々にお詫び申し上げます。あと、オブジェクトを導入したのは主にJerome Vouillonという方だそうです。不勉強でした。惹玖先生、変な所にお名前出したりしてすみませんでした。

ところで、色々とお恥ずかしいのでこれ以上上塗りするのはどうかとも思うのですが、私がオブジェクト有用と考えている理由をば補足しておきます。

  1. 型宣言しなくてもレコードのように使える。モジュール内部のレコード構造でやたら型が複雑になるようなものも、型宣言せずにレコードのような構文で書けるので便利。特にpa_oo使うと、{< >}だけでインスタンス化できるし。
  2. 組の要素が三つ以上になると段々分からなくなってくるので、オブジェクトにして要素に名前をつけておく。これもやっぱりレコードの代わり。
  3. アプリケーション内の随所で利用される横断的でベーシックなレコード構造(例えば< x:int; y:int: width:int: height:int>とか< red:int; green:int: blue: int>)は、アプリケーション内で単一の型を用意してそれを拡張するのではなくて、その構造を利用する側が利用する部分だけ列多相(もしくはサブタイピング)しながら利用するようにすると、ファンクター的な緩い繋がりが作れる。もちろんずばりファンクターで書いてもいいけど、記述が煩雑になりがち。これが上で書いた「多相レコード」的な使い方。

たぶんこれで全部です。あとモジュールとオブジェクトを連携して云々という方法もあるそうですが、あまり活用した事はないです。こうやって見ると、オブジェクトなのに全くOOしてないですねー。