2005-10-24
AoE3
届いた!ヤバス!
TDD13章
あーどこのインターフェイスにまとめりゃいいとかまだまだだなぁ。リファクタリング力がタリナサス。
TDD12章
日本語が難しくなってまいりました。(長瀬メソッド)
rubyのIntegerの加算
ってInteger#+しか無いんだっけ?うー
これ
サブクラス作る必要ないよなぁ。Currentで定義してあるもんだけ作れればいいんだし、必要があったらevalしてClass作る、ていうのはあまり美しくないんでしょうか。
TDD 11章
実装の変更はない。テストから冗長な部分を削除。削除新鮮。
TDD 10章
整理するために全部を書いてみる。
class Money
attr_reader :amount, :currency
def initialize(amount, currency)
@amount = amount.to_i
@currency = currency
end
def equal?(money)
(@amount == money.amount) && (currency == money.currency)
end
alias_method :==, :equal?
def *(multiplier)
Money.__send__(self.class.to_s.underscore, @amount * multiplier, currency)
end
Currency = {
:dollar => 'USD',
:franc => 'CHF'
}
def self.method_missing(name, amount, currency = Currency[name])
klass = name.to_s.classify.constantize.new(amount, currency)
if klass.is_a? Money
klass
else
raise NameError
end
end
end
class Dollar < Money
end
class Franc < Money
end
class MoneySpecification < Spec::Context
def dollar_multiplication
five = Money.dollar(5)
Money.dollar(10).should_equal(five * 2)
Money.dollar(15).should_equal(five * 3)
end
def franc_multiplication
five = Money.franc 5
Money.franc(10).should_equal(five * 2)
Money.franc(15).should_equal(five * 3)
end
def equality
Money.dollar(5).equal?(Money.dollar(5)).should_be_true
Money.dollar(5).equal?(Money.dollar(6)).should_be_false
Money.franc(5).equal?(Money.franc(5)).should_be_true
Money.franc(5).equal?(Money.franc(6)).should_be_false
Money.franc(5).equal?(Money.dollar(5)).should_be_false
end
def currency
Money.dollar(1).currency.should_equal 'USD'
Money.franc(1).currency.should_equal 'CHF'
end
def different_class_equality
Money.new(10, 'CHF').equal?(Franc.new(10, 'CHF')).should_be_true
end
def money_factory
Money.dollar(1).class.should_equal Dollar
Money.franc(1).class.should_equal Franc
e = nil
begin
Money.array('foo')
rescue Exception => e
end
e.is_a?(Exception).should_be_true
end
end
TDD 9章
Railsちっく(?)な考え方でやってたらDollar FrancはMoneyを継承しているだけのクラスになっちゃった。
今のMoneyはこんな感じ。既存テストall blue.
class Money
attr_reader :amount, :currency
def initialize(amount, currency)
@amount = amount.to_i
@currency = currency
end
def equal?(money)
(@amount == money.amount) && (self.class == money.class)
end
alias_method :==, :equal?
def *(multiplier)
Money.__send__(self.class.to_s.underscore, @amount * multiplier)
end
Currency = {
:dollar => 'USD',
:franc => 'CHF'
}
def self.method_missing(name, amount)
klass = name.to_s.classify.constantize.new(amount, Currency[name])
if klass.is_a? Money
klass
else
raise NameError
end
end
end
下のfactory
ダメくさい!
def self.method_missing(name, *args)
klass = name.to_s.classify.constantize.new(*args)
if klass.is_a? Money
klass
else
raise NameError
end
end
に書き直し。これもどうなんかなぁ。テストは
def money_factory
Money.dollar(1).class.should_equal Dollar
Money.franc(1).class.should_equal Franc
e = nil
begin
Money.array('foo')
rescue Exception => e
end
e.is_a?(Exception).should_be_true
end
うわぁこれはどうなんよ。だれか助けて!assert_exceptionにあたるのが無いのが痛いなぁ。
TDD 八章
active_supportのstring拡張 + method_missingでfactory実装。
def self.method_missing(name, *args)
klass = name.to_s.classify.constantize
klass.new(*args) if klass.ancestors.include? Money
end
ぴあそんのページ
http://www.pearsoned.co.jp/washo/seigo.shtml
FirefoxでもIEでもひらけねーよ!
TDD 七章
終わり。equal?の実装変更。
TDD 第六章
終わり。Javaって大変そう。俺メモ timesは*に変えたんだよ
TDD 五章
終わり。Francコピペ。今後の展開が読めてきた。
TDD 四章
Dollar.new(1).should_equal Dollar.new(1)
にならなくてちょっとはまった。Object#==の比較だもんなぁ。あとmethod名をequals -> equal?とrubyっぽく変更。timesも*に変更。今のところのDollarクラスは
class Dollar
attr_reader :amount
def initialize(amount)
@amount = amount
end
def *(multiplier)
Dollar.new(@amount * multiplier)
end
def equal?(dollar)
@amount == dollar.amount
end
alias_method :==, :equal?
end
TDD 三章
終わり。三角測量って何。
def equality
Dollar.new(5).equals(Dollar.new(5)).should_be_true
Dollar.new(5).equals(Dollar.new(6)).should_be_false
end
()が入ると結構解りにくくなるかも -> should_*
TDD 二章
終わり。test自体の変更。
TDD本写経開始
テストはrSpecで。BDDの場合はテストつわんか。とりあえず一章終わり。
シロップタイプの葛根湯
うわぁ幼児向けシロップ風邪薬の味だマズー。
みんなOO厨って日記に書くいうてたのに
誰も書いてないよ><><
PofEAA呑み
OO厨!OO厨!
ぼくもOO厨になりたかった…。