Io スタイルガイド

http://en.wikibooks.org/wiki/Io_Programming/Io_Style_Guideの和訳です。

Io スタイルガイド

このページでは、良いIoコードを書くためのガイドラインを示しています。貴方の知識を寄稿してください。ただし、読者が参照しやすいよう、大項目はアルファベット順としてください。

値の代入
  • 可能な限りsetterを使用せよ。直接代入するな。
    • 属性を読み書きすることは、他の言語にもあるが、setSlotメソッドをオーバライドすることで代用することはできる。しかし、将来にわたりオーバライドすることがないことを保証できればその限りではないが、それ以外はsetterを使うべきである。バグを発見しやすくなる。
    • setterは可読性に優れる。"setForeground(Color White)"と命じる方が、"fgPen = Color White"と命じるよりも、可読性(および将来に渡る保守性)が高い。
  • 直接代入は有害であると認識せよ。
    • 外部オブジェクトの状態はそれ自身に作用させよ。
    • オブジェクトにやることを命ぜよ;普通、君よりそのオブジェクトの方が、そのやり方には詳しい。
    • 外部オブジェクトが必要だと思われる状態変更を行うメソッドを持っていない場合、追加せよ。今追加する必要がなくても、Ioは追加できるように出来ている。
初期化
  • メソッドは3つ以下の引数とせよ。オブジェクトの初期化に必要なステートはsetterを使用せよ。
  • Objectが扱うステートは自明とは限らない。initメソッドは以下のようにあるべきである:
    • オブジェクトの初期ステートに何らかのデフォルト値を割り当てるのは、どうしても必要な場合に限ってだけにすべき。
    • フィールドの初期値として、リテラルや不変値(0、""など)を設定すべきではない。代わりに、プロトタイプから継承すべき。
    • フィールドの初期値として、動的生成される値(list()など)を絶対に設定すべきではない。その値は、そのオブジェクトの全てのインスタンスに共有してしまう。
    • setterの代用として使うべきではない。初期状態の設定から変更を許してしまう。
  • 独立性と試験性のために、依存性注入(DI:dependency injection)パターンを用いよ。
    • 絶対に必要なリソースではない限り、取得すべきではない。ファイル、ウィンドウ、ネットワークソケット等。代わりに、引数として取得せよ。
    • 注意:オブジェクトはドメインに特有の知識を持ち、自身に特化し、それ自身のみに特化している。それを保て。
    • 例:データとして式とリテラルを持つ、表シートオブジェクトを考える。そのオブジェクトは、データファイルにどのように保存されるかの情報は持っていない。代わりに、impex(インポート/エクスポート用の短い)オブジェクトを用いてデータファイルの読み書きを適切に行ったり、クエリを発行してデータファイルを書き出したりする。この時、viewオブジェクトは特殊なエクスポートとなる:ファイルに書き出す代わりに画面に描画する。これにより、表の典型的な形式や、多値をとるチャートの類も扱うことができる。同様に、キーボードやマウスなどを接続すれば、特殊なインポータ・インタフェースとなる。故に、表シートをロードやセーブは、手作業によるデータ入力を自動化したタスクへと還元でき、データの正当性を確保しつつ、データの入力元や出力先を表シートオブジェクトから独立させることができる。
  • オブジェクトのステートは最小限に保て。
    • 他のオブジェクトへの参照は、参照元の責務のためにのみ存在すべき。
    • 2つ以上の責務が生じてしまったオブジェクトは、2つ以上のオブジェクトにリファクタリングすべき。
メソッドと引数
  • メソッド名は小文字で始めよ。これはIoでの定番のコーディング規約である。
  • 3つ以上の引数を受け取るオブジェクトはリファクタリングの対象とせよ。
    • メソッドの引数を最小限に保て。
    • 引数を束ねる「パラメータ・オブジェクト」を用いよ。
    • 特に返すべき返却値がなければ、常にselfを返却せよ。メソッド鎖を構成できる。
    • 3つ以上の引数を受け取るよりメソッドは、メソッド鎖を用いてリファクタリングせよ。

全体的にSmalltalkっぽい勝手なイメージです。Smalltalkerの方の感想を伺いたいところ。
メソッドの引数制限は、他のガイドでは明示されることは少ないように思う。

あ、これ、自分でもまだ理解できてない部分もありますから、参考程度になさって下さい。日本語として変だし、上の文章は読み込めば理解出来るとは限りません。