2010-01-01から1年間の記事一覧
朝ではありませんが、今日も読むことができました。今日は第5章の後半です。 無限リスト ここでも lambda で包むことで遅延評価して無限リストを実現している lazy_stream.rb 高階手続き Proc オブジェクトを関数に見立てると、Rubyのブロックを活用したコー…
今日は第5章の前半です。 「Matz は機会均等を重んじる盗人であり」翻訳が難しそう Ruby は関数型言語じゃないしいくつか重要な特徴が抜けているけど、関数型プログラミングのテクニックを参考にしたプラクティスがあるよ、という話 遅延評価 lambda で包む …
今日は第4章の後半です。 Pathname と FileUtils 個人的には Pathname は便利だけどとけ込みすぎてうっかり使っちゃいけないところにまで渡してしまうのであまり使わないようにしているんですよね……。思い付く機能はだいたいあるんですけど、たまに無いこと…
今日は第4章の前半です。 Prawn の AFM(Adobe Font Metrics) のパーサを題材に 行指向でステートフルなパーサ セクションにまとめられている部分がある String#[ergexp, nth] で切り出し 正規表現 アンカーを使って先頭、末尾、単語境界などにマッチさせる(\…
今日は第3章の後半です。 メソッドでクラスを生成して継承して使うテクニック クラスを生成する部分を遮蔽してブロックつきメソッドで宣言的にする ヘルパーモジュールにブロックを渡して Module.new した無名モジュールを利用する フックメソッドを活用 Mod…
今日は第3章の前半です。動的な機能ということで、メタプログラミングRubyに通じるような内容になりそうです。 BlankSlate - メタプログラミングRubyで出てきましたね 一旦見えなくしたメソッドをまた呼び出せるようにできる機能もある(UnbondMethod を保存…
今日は第2章の後半です。 attr_reader, attr_writer, attr_accessor を使う(get_??? とか set_??? というメソッド名にはしない) method!, method? といった名前の慣習を知る 任意の値を true/false に変換するには二重否定(!!obj) 疑問符(?) つきメソッドが…
今日は第2章の前半です。すごい章題ですね。 まずは実例を見る Ruport の Table 機能 クラス名と同名のメソッドによるインスタンス生成(Array() や Hash() のように) 引数の型などを検査して生成方法をディスパッチする メソッド引数のいろいろ 標準、省略可…
第1章の後半です。師走ですし本書はさくさく進めます。 テスト手法 モック、スタブの利用 flexmock StringIO を用いて入出力をスタブにする IO を汎用オブジェクトでスタブにする方法もある 汎用オブジェクトはインタフェースと密結合する(内部処理の変更で…
Rubyベストプラクティス -プロフェッショナルによるコードとテクニック作者: Gregory Brown,高橋征義,笹井崇司出版社/メーカー: オライリージャパン発売日: 2010/03/26メディア: 大型本購入: 9人 クリック: 307回この商品を含むブログ (47件) を見る今日から…
付録E では nil オブジェクトを題材にしています。 「今までに見た NullPointerException の数を憶えているか?」 Null オブジェクト(NullDevice クラス)を作って、何もしないメソッドを定義する 「Null オブジェクトは Java っぽい」 NilClass に直接必要な…
Zork(テキスト形式のアドベンチャーゲーム)の記述言語 TADS General Purpose Language の略で GPL と書かれているけどついライセンスのGPL と読んでしまう 内部 DSL と外部 DSL なんとなく内部 DSL をおすすめしている感じ DSL と メタプログラミング は強い…
A.3 メソッド引数のトリック ハッシュ引数でキーワード引数っぽく使う用例 可変長引数(アスタリスクを付ける) デフォルト値つきの引数 A.4 自己yield ブロックの呼び出し(yield)に self を渡すこと Object#tap の例 A.5 Symbol#to_proc 「ワンコールブロック…
その1 は第9章のラストと一緒になってしまいました。 A.2 nil ガード a ||= val こういう書き方よくしますね けど、ここの等価だと言ってるこのコードはちょっと間違ってますね。 a ||= [] が if a != nil a = a else a = [] end と等しいと書いてありますが…
危険なメタプログラミングを防ぐ話題は続きのほうにありました。今日は9.2 「モンキーパッチを防ぐ」からです オープンクラスを無制限に使うのでなく、モジュールを作って include する → ancestors に出る 動的メソッドを定義する時は先に同名のメソッドが…
ActionController のテストは一見普通のテストだけどその裏には……というところで終わったのでした。続き テスト テストにもメタプログラミングを駆使する そりゃそうだろうと思ってました テストする元のクラスを再オープンしていますが、こういうのでテスト…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る第9章ではメタプログラミングの落とし穴を避け…
今日は ActiveRecord の動的ファインダのところです。 ActiveRecord::Base.find は find_by_ のように属性名を含むメソッドでの検索もできる and, or での連結などもできる 「ゴーストメソッド」で実装 長い ここでもやはり最初に method_missing でメソッド…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る第8章では ActiveRecord の動的属性と動的ファ…
今日は ActiveRecord::Base で使われているメタプログラミングの実際について。 autoload で require を遅延 Validations の included でサブモジュールを追加 include させる クラス拡張ミックスインで ActiveRecord::Base の特異クラスに Validations など…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第2部「Rails におけるメタプログラミ…
第5章 後半、フックメソッドのところからです。 フックメソッドとは inherited, included, method_added など何かイベントがあった時にインタプリタから自動的に呼ばれるメソッドのこと Merb の例 - included を使って Merb::Cache::CacheMixin が include …
第5章、eval を使った実践編。 まずはクラスマクロ attr_checked ではなくカーネルメソッドとして add_checked_attr(klass, meth) のようなメソッドを定義(手順1) eval でべったりとクラスを開いてメソッド定義。これはかなりの力技 すぐに eval を使わずに …
第5章前半、eval の説明がまだ続きます。 「???_eval にブロックを渡すのと文字列を渡すのは同じことだ」 - いつパース、コンパイルされるかは異なりますけどね それにブロックにするか文字列にするかで定数探索が異なる時期があったような……。今の 1.9 だと…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第5章です。「コードを記述するコード…
第4章の最後です。 クイズ: モジュールを include してクラスメソッドを定義しようとしてもできない クラスの特異クラスに include する それ extend でできるよ alias でオリジナルのメソッドを退避してラッパを書く手法。アラウンドエイリアスと呼ぶらしい…
第4章の特異メソッドのところからです。 クラスメソッドは実は特異メソッドだったんだよ。な、なんだってー>ΩΩΩ とかやって欲しかった attr_reader とか attr_writer のようなメソッドをクラスマクロと言うらしい 「特異クラスはRuby界の UFO だ。実際に目…
クラスのインスタンス変数とクラス変数 クラスもオブジェクトなので当然インスタンス変数を持てる クラス変数は継承で共有される クラス変数じゃなくてクラスのインスタンス変数を使うのがいまどきのメインストリームらしい クラスのインスタンス変数に利用…
メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/08/28メディア: 大型本購入: 18人 クリック: 533回この商品を含むブログ (125件) を見る今日から第4章です。ここには特異クラスの説明…
ブロックの章の実用編ということで RedFlag という営業部門向けの DSL を作るところです。 最初のバージョン適当すぎる。でもまあちゃんと動く 「月間売上が驚くほど高い」 「こんな感じの DSL になるといいのだけど」最初にそれを見せてください上司さん se…