2010-12-01から1ヶ月間の記事一覧

Rubyベストプラクティス 第5章 関数型プログラミングのテクニック その2

朝ではありませんが、今日も読むことができました。今日は第5章の後半です。 無限リスト ここでも lambda で包むことで遅延評価して無限リストを実現している lazy_stream.rb 高階手続き Proc オブジェクトを関数に見立てると、Rubyのブロックを活用したコー…

Rubyベストプラクティス 第5章 関数型プログラミングのテクニック その1

今日は第5章の前半です。 「Matz は機会均等を重んじる盗人であり」翻訳が難しそう Ruby は関数型言語じゃないしいくつか重要な特徴が抜けているけど、関数型プログラミングのテクニックを参考にしたプラクティスがあるよ、という話 遅延評価 lambda で包む …

Rubyベストプラクティス 第4章 テキスト処理とファイル管理 その2

今日は第4章の後半です。 Pathname と FileUtils 個人的には Pathname は便利だけどとけ込みすぎてうっかり使っちゃいけないところにまで渡してしまうのであまり使わないようにしているんですよね……。思い付く機能はだいたいあるんですけど、たまに無いこと…

Rubyベストプラクティス 第4章 テキスト処理とファイル管理 その1

今日は第4章の前半です。 Prawn の AFM(Adobe Font Metrics) のパーサを題材に 行指向でステートフルなパーサ セクションにまとめられている部分がある String#[ergexp, nth] で切り出し 正規表現 アンカーを使って先頭、末尾、単語境界などにマッチさせる(\…

Rubyベストプラクティス 第3章 動的な機能を使いこなす その2

今日は第3章の後半です。 メソッドでクラスを生成して継承して使うテクニック クラスを生成する部分を遮蔽してブロックつきメソッドで宣言的にする ヘルパーモジュールにブロックを渡して Module.new した無名モジュールを利用する フックメソッドを活用 Mod…

Rubyベストプラクティス 第3章 動的な機能を使いこなす その1

今日は第3章の前半です。動的な機能ということで、メタプログラミングRubyに通じるような内容になりそうです。 BlankSlate - メタプログラミングRubyで出てきましたね 一旦見えなくしたメソッドをまた呼び出せるようにできる機能もある(UnbondMethod を保存…

Rubyベストプラクティス 第2章 美しいAPIを設計する その2

今日は第2章の後半です。 attr_reader, attr_writer, attr_accessor を使う(get_??? とか set_??? というメソッド名にはしない) method!, method? といった名前の慣習を知る 任意の値を true/false に変換するには二重否定(!!obj) 疑問符(?) つきメソッドが…

Rubyベストプラクティス 第2章 美しいAPIを設計する その1

今日は第2章の前半です。すごい章題ですね。 まずは実例を見る Ruport の Table 機能 クラス名と同名のメソッドによるインスタンス生成(Array() や Hash() のように) 引数の型などを検査して生成方法をディスパッチする メソッド引数のいろいろ 標準、省略可…

Rubyベストプラクティス 第1章 テストでコードを駆動する その2

第1章の後半です。師走ですし本書はさくさく進めます。 テスト手法 モック、スタブの利用 flexmock StringIO を用いて入出力をスタブにする IO を汎用オブジェクトでスタブにする方法もある 汎用オブジェクトはインタフェースと密結合する(内部処理の変更で…

Rubyベストプラクティス 第1章 テストでコードを駆動する その1

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック作者: Gregory Brown,高橋征義,笹井崇司出版社/メーカー: オライリージャパン発売日: 2010/03/26メディア: 大型本購入: 9人 クリック: 307回この商品を含むブログ (47件) を見る今日から…

メタプログラミングRuby 付録E から騒ぎ

付録E では nil オブジェクトを題材にしています。 「今までに見た NullPointerException の数を憶えているか?」 Null オブジェクト(NullDevice クラス)を作って、何もしないメソッドを定義する 「Null オブジェクトは Java っぽい」 NilClass に直接必要な…

メタプログラミングRuby 付録B ドメイン特化言語

Zork(テキスト形式のアドベンチャーゲーム)の記述言語 TADS General Purpose Language の略で GPL と書かれているけどついライセンスのGPL と読んでしまう 内部 DSL と外部 DSL なんとなく内部 DSL をおすすめしている感じ DSL と メタプログラミング は強い…

メタプログラミングRuby 付録A よく使うイディオム その3

A.3 メソッド引数のトリック ハッシュ引数でキーワード引数っぽく使う用例 可変長引数(アスタリスクを付ける) デフォルト値つきの引数 A.4 自己yield ブロックの呼び出し(yield)に self を渡すこと Object#tap の例 A.5 Symbol#to_proc 「ワンコールブロック…

メタプログラミングRuby 付録A よく使うイディオム その2

その1 は第9章のラストと一緒になってしまいました。 A.2 nil ガード a ||= val こういう書き方よくしますね けど、ここの等価だと言ってるこのコードはちょっと間違ってますね。 a ||= [] が if a != nil a = a else a = [] end と等しいと書いてありますが…