TL;DR だいたいみんな知ってることだと思います。On Lispの「いつオブジェクトを使うのか」に言いたいことだいたい書いてあります。 背景 前にサーバーサイドMVCって記事で、クラスはせっかくモジュラーな関数をそうじゃなくするから基本的に悪だってちろっと書いた。 でも最近Carrotの型チェッカをCLOS(のサブセット)を使って書き直した時に、主観的なコードのきれいさが劇的に向上したという経験をしていたり、PILOTの人と最近のPHPのOOP*1の話をしたりしてて、クラス、もしくは代数的データ型の使い時について、少なくとも自分が則るガイドラインを作りたいと思った。 この記事では、クラスを作るスタイルと、既存のデータ構造と関数を使うスタイルを対立させて考えます。オブジェクト指向と関数型の話ではなくて、例えばRubyでArrayとかHashをそのまま使うスタイルは後者です。関数型の人なら、