capsctrldays

2008-02-01 (金) [長年日記]

[Ruby] Writing Effective Ruby Code - Patterns(3)

続き。そしておしまい。

日付フォーマット

  • 文字列から日付型をつくるのは非常に遅い(parse_date)
    • 様々なフォーマットに対応しないといけないから
  • 使うフォーマットを決めて自前で変換メソッドを作るとよい

一時データ構造のための定数

  • 中間インスタンスを生成しないで定数にする

ファイルシステムへのアクセス

  • 遅いよ

ObjectSpace.each_object

ObjectSpace.each_object(Class) {|c| f(c) }
ObjectSpace.each_object {|o| o.is_a?(Class) && f(o) }

ブロックの引数が必要ないとき

  • どんなメソッドにもブロックが渡せるよ
  • ブロック引数を明示しないほうが速いよ

Symbol.to_proc

  • Railsにあるよね

mapメソッドのチェーン

  • hoge.map(..).map(..) とかするよりも hoge.map {|i| .. } のが速い

動的にrequireする

  • Railsは見たこと無い定数をみつけると勝手にロードしてくれる
    • なので明示的にrequireしなくていい
  • 弊害として従来のrequireの挙動がおかしくなることがある
  • なので、たとえばHogeクラスを拡張したいときは、
require 'hoge'
class Hoge ...

じゃなくて

Hoge
class Hoge ...

とする。

インクルードモジュール vs クラスオープン

  • モジュールの呼び出しはちょっとだけ遅い
  • ので、1つのクラスにしか使われないんだったらクラスをオープンしたほうがよい

bliki_ja:TestCancer

訳しました。