tdd
ついに加法 やったこと Bankクラスの仮実装 plusメソッドの追加 RubyとPythonでやったときはExpressionインタフェースを作ったのですが、今回今のところインタフェースが必要とは思えないので、作ってません。 lib/Money.pm package Money; use strict; use …
諸悪の根源 やったこと DollarクラスおよびFrancクラスの削除 冗長なテストの見直し 不要なコードを削除したのですっきりしました。 lib/Money.pm package Money; use strict; use warnings; use Carp; use version; our $VERSION = qv('0.0.3'); use overlo…
興味深い時 (times) やったこと times()メソッドをMoneyクラスに移動 等値性の評価をクラスではなく、通貨で行うようにした。 サブクラスはコンストラクタだけなので次回以降、取り除いていきます。 lib/Money.pm package Money; use strict; use warnings; …
生きている時(times) DollarクラスとFrancクラスのコンストラクタを共通化 通貨単位を返すcurrency()メソッドの実装 times()メソッド内でのファクトリメソッドの使用 DollarクラスとFrancクラスでスーパークラスのコンストラクタを呼んでいますが、この処理…
オブジェクトの生成 今回は、クライアントコード側でDollarクラスやFrancクラスの内部実装を意識させないためにファクトリメソッドを定義しました。Moneyクラスのfranc()メソッドおよびdollar()メソッドがそれに当たります。原書ではMoneyクラスを抽象メソッ…
りんごとみかん FrancオブジェクトとDollarオブジェクトを比較した際に単位が同じでも等値と判断されないように修正します。今回は、refを使用してクラス名を取得し、通貨を判定するようにしています。 lib/Money.pm package Money; use strict; use warning…
再度、すべてに対する等価性 今回やったこと DollarクラスおよびFrancクラスの基底クラスMoneyを作成 equals()メソッドおよび関連メソッドを基底クラスに移動 クラス間の重複を取り除いたので大分すっきりしました。あとはコンストラクタとtimesメソッドの重…
「フランク」に話す DollarクラスをコピペしてFrancクラスを追加しました。本来ならやっちゃいけない変更です。特筆すべきことはないです。 package Money; use strict; use warnings; use version; our $VERSION = qv('0.0.3'); 1; package Dollar; use stric…
今回はインスタンス変数を直接アクセスせずに比較できるように変更しています。ただ、インスタンス変数amountのプライベート化をどうすれば実現できる分からなかったので、運用回避という形をとっています。やろうと思えばアクセスできてしまいます。Perlの…
今回はequals()メソッドを定義してDollarオブジェクト同士の等値性を比較できるようにしています。あと、書き忘れていましたが1回目でis()のactualとexpectedが逆だったので合わせて修正しました。 lib/Money.pm package Money; use strict; use warnings; u…
今回は大した変更をしていません。 lib/Money.pm timesメソッドでDollarクラスを返すよう変更しました。 package Money; use strict; use warnings; use version; our $VERSION = qv('0.0.3'); 1; package Dollar; use strict; use warnings; sub new { my (…
xUnitチックにテストが書けるTest::Classなるものがあることを技評の記事*1で知ったので、試してみました。 どうせ試してみるなら、『テスト駆動開発入門』の写経がいいかなと思いやってみました。Ruby、PythonはやったけどPerlは写経していなかったし、それ…
12章で実施したこと Expressionインタフェースの追加 +()メソッドの追加 Bankクラスの仮実装 money.rb 静的型付けであるJavaのコードから写経しているので、不自然な部分が多々あります。、 #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門12章 ついに…
11章で実施したこと Dollarクラス、Francクラスの削除 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門11章 諸悪の根源 class Money attr_accessor :amount, :currency protected :amount def initialize(amount, currency) @amount = amount…
10章で実施したこと *()メソッドをMoneyクラスに移動 結局Pythonの__repr__()メソッドに相当するメソッドが分かりませんでした。to_s()メソッドがクラスの文字列表現らしいのですが、うまく出力してくれませんでした。 money.rb #!/usr/bin/ruby #coding: ut…
9章で実施したこと DollarクラスとFrancクラスのコンストラクタを共通化 通貨単位を返すcurrencyアクセサの実装 *()メソッド内でのファクトリメソッドの使用 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門9章 生きている時(times) class Mo…
8章で実施したこと ファクトリメソッドパターンを適用し、サブクラスへの参照を減少させた money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門8章 オブジェクトの生成 class Money attr_accessor :amount protected :amount def ==(other) retur…
7章で実施したこと 同じ量のFrancとDollarを比較した際、同値と判断されないよう修正 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門7章 りんごとみかん class Money attr_accessor :amount protected :amount def ==(other) return @amount…
5章で実施したこと Francクラスの追加 ただし一番汚い形で。 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門5章 「フランク」に話す class Dollar attr_accessor :amount protected :amount def initialize(amount) @amount = amount end def …
6章で実施したこと Franc、Dollarの親クラスMoneyの追加 Franc、Dollarの*()メソッドをMoneyに移動 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門6章 再度、すべてに対する等価性 class Money attr_accessor :amount protected :amount def…
テスト駆動開発入門をPythonで写経してみた。1をpikzieでテストを書き直してみました。 money.py テスト駆動開発入門をPythonで写経してみた。1から少し書き換わっています。 #!/usr/bin/env python # coding: utf-8 """ テスト駆動開発入門1章 """ class Do…
ちょっと再開します。 PythonよりRubyの方がすっきり書けて楽しいです。 4章で実施したこと amoutのプライベート化 今回はインスタンスメソッドとして呼び出しているので、可視性はprotectedになっています。 money.rb #!/usr/bin/ruby #coding: utf-8 # テ…
12章で実施したこと Bankクラスの仮実装 MoneyクラスをExpressionクラスから継承(実装)するよう変更 __add__()メソッドの追加 だんだん元のコードの意図が分かりづらくなってきました。Moneyの和はExpression(式)になるという発想自体が私には出てきません。…
11章で実施したこと DollarクラスおよびFrancクラスの削除 冗長なテストの見直し 不必要なテストを削除しています。 money.py #!/usr/bin/env python # coding: utf-8 """テスト駆動開発入門 11章 諸悪の根源 """ class Money(object): def __init__(self, a…
10章のソースコードがどこを探しても見つからなかったので、やり直しました。その際、前回から気になっていた場所も修正しました。 10章で実施したこと __mul__()メソッドをMoneyクラスに移動 デバッグ用の__str__()メソッドの定義 JavaでいうtoString()メソ…
9章で実施したこと DollarクラスとFrancクラスのコンストラクタを共通化 通貨単位を返すcurrency()メソッドの実装 times()メソッド内でのファクトリメソッドの使用 times()メソッドが気持ち悪いです。Python的には__mul__()メソッドを定義して*演算子をオー…
8章で実施したこと ファクトリメソッドパターンを適用し、サブクラスへの参照を減少させた times()メソッドをMoneyクラスで抽象メソッドとして宣言 Python2.5には抽象クラスが無いので、times()メソッドでNotImplementedErrorを発生させています。 money.py …
7章で実施したこと 同じ量のFrancとDollarを比較した際、同値と判断されないよう修正 __class__アトリビュートが同じかどうかで判定するようにしました。ただ直接__class__アトリビュートを見ているのが気持ち悪いです。ほかにいい方法はないかな。 money.py…
ちょっとずつ書いていきます。 6章で実施したこと Franc、Dollarの親クラスMoneyの追加 Franc、Dollarの__eq__()メソッドをMoneyに移動 本筋とは関係ないが実施したこと 意味をなしていないequals()メソッドの削除。__eq__()メソッドへの統合 前回も書きまし…
とりあえずコードだけ。原書は相変わらず会社に置きっぱなしなので記憶を頼りに解説を書こうかと思っていましたが、かなり昔に書いたコードなので思い出せませんでした。タイプスタンプを見る限りでは3ヶ月くらい前でした。やりっぱなしじゃ勉強した意味がな…