Subscribed unsubscribe Subscribe Subscribe

目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

tdd

テスト駆動開発入門を Perlで写経してみた。 12

ついに加法 やったこと Bankクラスの仮実装 plusメソッドの追加 RubyとPythonでやったときはExpressionインタフェースを作ったのですが、今回今のところインタフェースが必要とは思えないので、作ってません。 lib/Money.pm package Money; use strict; use …

テスト駆動開発入門をPerlで写経してみた。 11

諸悪の根源 やったこと DollarクラスおよびFrancクラスの削除 冗長なテストの見直し 不要なコードを削除したのですっきりしました。 lib/Money.pm package Money; use strict; use warnings; use Carp; use version; our $VERSION = qv('0.0.3'); use overlo…

テスト駆動開発入門を Perlで写経してみた。 10

興味深い時 (times) やったこと times()メソッドをMoneyクラスに移動 等値性の評価をクラスではなく、通貨で行うようにした。 サブクラスはコンストラクタだけなので次回以降、取り除いていきます。 lib/Money.pm package Money; use strict; use warnings; …

テスト駆動開発入門を Perlで写経してみた。9

生きている時(times) DollarクラスとFrancクラスのコンストラクタを共通化 通貨単位を返すcurrency()メソッドの実装 times()メソッド内でのファクトリメソッドの使用 DollarクラスとFrancクラスでスーパークラスのコンストラクタを呼んでいますが、この処理…

テスト駆動開発入門をPerlで写経してみた。 8

オブジェクトの生成 今回は、クライアントコード側でDollarクラスやFrancクラスの内部実装を意識させないためにファクトリメソッドを定義しました。Moneyクラスのfranc()メソッドおよびdollar()メソッドがそれに当たります。原書ではMoneyクラスを抽象メソッ…

テスト駆動開発入門を Perlで写経してみた。7

りんごとみかん FrancオブジェクトとDollarオブジェクトを比較した際に単位が同じでも等値と判断されないように修正します。今回は、refを使用してクラス名を取得し、通貨を判定するようにしています。 lib/Money.pm package Money; use strict; use warning…

テスト駆動開発入門をPerlで写経してみた。 6

再度、すべてに対する等価性 今回やったこと DollarクラスおよびFrancクラスの基底クラスMoneyを作成 equals()メソッドおよび関連メソッドを基底クラスに移動 クラス間の重複を取り除いたので大分すっきりしました。あとはコンストラクタとtimesメソッドの重…

テスト駆動開発入門をPerlで写経してみた。 5

「フランク」に話す DollarクラスをコピペしてFrancクラスを追加しました。本来ならやっちゃいけない変更です。特筆すべきことはないです。 package Money; use strict; use warnings; use version; our $VERSION = qv('0.0.3'); 1; package Dollar; use stric…

テスト駆動開発入門をPerlで写経してみた。 4

今回はインスタンス変数を直接アクセスせずに比較できるように変更しています。ただ、インスタンス変数amountのプライベート化をどうすれば実現できる分からなかったので、運用回避という形をとっています。やろうと思えばアクセスできてしまいます。Perlの…

テスト駆動開発入門をPerlで写経してみた。 3

今回はequals()メソッドを定義してDollarオブジェクト同士の等値性を比較できるようにしています。あと、書き忘れていましたが1回目でis()のactualとexpectedが逆だったので合わせて修正しました。 lib/Money.pm package Money; use strict; use warnings; u…

テスト駆動開発入門をPerlで写経してみた。 2

今回は大した変更をしていません。 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 (…

テスト駆動開発入門をPerlで写経してみた。1

xUnitチックにテストが書けるTest::Classなるものがあることを技評の記事*1で知ったので、試してみました。 どうせ試してみるなら、『テスト駆動開発入門』の写経がいいかなと思いやってみました。Ruby、PythonはやったけどPerlは写経していなかったし、それ…

テスト駆動開発入門をRubyで写経してみた。12

12章で実施したこと Expressionインタフェースの追加 +()メソッドの追加 Bankクラスの仮実装 money.rb 静的型付けであるJavaのコードから写経しているので、不自然な部分が多々あります。、 #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門12章 ついに…

テスト駆動開発入門をRubyで写経してみた。11

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…

テスト駆動開発入門をRubyで写経してみた。10

10章で実施したこと *()メソッドをMoneyクラスに移動 結局Pythonの__repr__()メソッドに相当するメソッドが分かりませんでした。to_s()メソッドがクラスの文字列表現らしいのですが、うまく出力してくれませんでした。 money.rb #!/usr/bin/ruby #coding: ut…

テスト駆動開発入門をRubyで写経してみた。9

9章で実施したこと DollarクラスとFrancクラスのコンストラクタを共通化 通貨単位を返すcurrencyアクセサの実装 *()メソッド内でのファクトリメソッドの使用 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門9章 生きている時(times) class Mo…

テスト駆動開発入門をRubyで写経してみた。8

8章で実施したこと ファクトリメソッドパターンを適用し、サブクラスへの参照を減少させた money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門8章 オブジェクトの生成 class Money attr_accessor :amount protected :amount def ==(other) retur…

テスト駆動開発入門をRubyで写経してみた。7

7章で実施したこと 同じ量のFrancとDollarを比較した際、同値と判断されないよう修正 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門7章 りんごとみかん class Money attr_accessor :amount protected :amount def ==(other) return @amount…

テスト駆動開発入門をRubyで写経してみた。5

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 …

テスト駆動開発入門をRubyで写経してみた。6

6章で実施したこと Franc、Dollarの親クラスMoneyの追加 Franc、Dollarの*()メソッドをMoneyに移動 money.rb #!/usr/bin/ruby #coding: utf-8 # テスト駆動開発入門6章 再度、すべてに対する等価性 class Money attr_accessor :amount protected :amount def…

テスト駆動開発入門をpikzieで写経してみた。1

テスト駆動開発入門をPythonで写経してみた。1をpikzieでテストを書き直してみました。 money.py テスト駆動開発入門をPythonで写経してみた。1から少し書き換わっています。 #!/usr/bin/env python # coding: utf-8 """ テスト駆動開発入門1章 """ class Do…

テスト駆動開発入門をRubyで写経してみた。 4

ちょっと再開します。 PythonよりRubyの方がすっきり書けて楽しいです。 4章で実施したこと amoutのプライベート化 今回はインスタンスメソッドとして呼び出しているので、可視性はprotectedになっています。 money.rb #!/usr/bin/ruby #coding: utf-8 # テ…

テスト駆動開発入門をPythonで写経してみた。12

12章で実施したこと Bankクラスの仮実装 MoneyクラスをExpressionクラスから継承(実装)するよう変更 __add__()メソッドの追加 だんだん元のコードの意図が分かりづらくなってきました。Moneyの和はExpression(式)になるという発想自体が私には出てきません。…

テスト駆動開発入門をPythonで写経してみた。11

11章で実施したこと DollarクラスおよびFrancクラスの削除 冗長なテストの見直し 不必要なテストを削除しています。 money.py #!/usr/bin/env python # coding: utf-8 """テスト駆動開発入門 11章 諸悪の根源 """ class Money(object): def __init__(self, a…

テスト駆動開発入門をPythonで写経してみた。10

10章のソースコードがどこを探しても見つからなかったので、やり直しました。その際、前回から気になっていた場所も修正しました。 10章で実施したこと __mul__()メソッドをMoneyクラスに移動 デバッグ用の__str__()メソッドの定義 JavaでいうtoString()メソ…

テスト駆動開発入門をPythonで写経してみた。9

9章で実施したこと DollarクラスとFrancクラスのコンストラクタを共通化 通貨単位を返すcurrency()メソッドの実装 times()メソッド内でのファクトリメソッドの使用 times()メソッドが気持ち悪いです。Python的には__mul__()メソッドを定義して*演算子をオー…

テスト駆動開発入門をPythonで写経してみた。8

8章で実施したこと ファクトリメソッドパターンを適用し、サブクラスへの参照を減少させた times()メソッドをMoneyクラスで抽象メソッドとして宣言 Python2.5には抽象クラスが無いので、times()メソッドでNotImplementedErrorを発生させています。 money.py …

テスト駆動開発入門をPythonで写経してみた。7

7章で実施したこと 同じ量のFrancとDollarを比較した際、同値と判断されないよう修正 __class__アトリビュートが同じかどうかで判定するようにしました。ただ直接__class__アトリビュートを見ているのが気持ち悪いです。ほかにいい方法はないかな。 money.py…

テスト駆動開発入門をPythonで写経してみた。6

ちょっとずつ書いていきます。 6章で実施したこと Franc、Dollarの親クラスMoneyの追加 Franc、Dollarの__eq__()メソッドをMoneyに移動 本筋とは関係ないが実施したこと 意味をなしていないequals()メソッドの削除。__eq__()メソッドへの統合 前回も書きまし…

テスト駆動開発入門をPythonで写経してみた。16

とりあえずコードだけ。原書は相変わらず会社に置きっぱなしなので記憶を頼りに解説を書こうかと思っていましたが、かなり昔に書いたコードなので思い出せませんでした。タイプスタンプを見る限りでは3ヶ月くらい前でした。やりっぱなしじゃ勉強した意味がな…

テスト駆動開発入門をPythonで写経してみた。15

とりあえずコードだけ。 money.py #!/usr/bin/env python # coding: utf-8 """テスト駆動開発入門 15章 通貨の混合 """ class Expression(object): def reduce(self, bank, currency_to): raise NotImplementedError def __add__(self, addend): raise NotIm…

テスト駆動開発入門をPythonで写経してみた。14

とりあえずコードだけ。 money.py #!/usr/bin/env python # coding: utf-8 """テスト駆動開発入門 14章 変化 """ class Expression(object): def reduce(self, bank, currency_to): raise NotImplementedError class Money(Expression): def __init__(self, …

テスト駆動開発入門をPythonで写経してみた。13

とりあえずコードだけ。 money.py #!/usr/bin/env python # coding: utf-8 """テスト駆動開発入門 13章 動作 """ class Expression(object): def reduce(self, currency_to): pass class Money(Expression): def __init__(self, amount, currency): self._am…

テスト駆動開発入門をPythonで写経してみた。 4.1

JavaのassertEquals()は中でequals()メソッドを呼んでいるんですね。たぶん。だから違うオブジェクトを比較しているのに"Equal"と判断されるんですね。Javaでコードを書かないのでよくわかないですが。それに対しPythonのassertEqual()は中で__eq__()メソッ…

テスト駆動開発入門をPythonで写経してみた。5

なんてことはないです。一番汚い形でFrancクラスを追加しただけです。7章で抽象クラスを使うのですが、Pythonには言語の機能として抽象クラスとやらが無いようです。ていうか抽象クラスって何だ?レベルなのですが。とりあえず調べよう。追記 抽象基底クラス…

テスト駆動開発入門をPythonで写経してみた。 4

こうですか?よく分かりません。 目的 amountのプライベート化 原書と違うところ 11行目、12行目 原書ではassertEquals()にオブジェクトを渡しています。PythonのassertEqual()で同じことするとそれは違うオブジェクトを比較していると怒られます。比較したい…

テスト駆動開発入門をRubyで写経してみた。 3

第3章 # !/usr/bin/ruby # coding : utf-8 # テスト駆動開発入門3章 require 'test/unit' class Test_Money < Test::Unit::TestCase def test_multiplication five = Dollar.new(5) product = five.times(2) assert_equal(10, product.get_amount) product =…

テスト駆動開発入門をRubyで写経してみた。 2

第2章 # !/usr/bin/ruby # coding : utf-8 # テスト駆動開発入門2章 require 'test/unit' class Test_Money < Test::Unit::TestCase def test_multiplication five = Dollar.new(5) product = five.times(2) assert_equal(10, product.get_amount) product =…

テスト駆動開発入門をRubyで写経してみた。 1

こうですか?よく分かりません。 RubyはPythonよりも初心者レベルなのでよく分かりません。何か間違いがあったらご指摘をば。 とりあえず『テスト駆動開発入門』を手元に持ってない人にはよく分からないと思います。このあたりを参考にしました。 Test::Unit …

テスト駆動開発入門をPythonで写経してみた。 1

こうですか?よく分かりません。 第1章 #coding : utf-8 """ テスト駆動開発入門1章 """ import unittest class TestMoney(unittest.TestCase): def testMultiplication(self): five = Dollar(5) five.times(2) self.assertEqual(10, five.amount) class Doll…

テスト駆動開発入門をPythonで写経してみた。 3

第3章 #coding : utf-8 """ テスト駆動開発入門3章 """ import unittest class TestMoney(unittest.TestCase): def testMultiplication(self): five = Dollar(5) product = five.times(2) self.assertEqual(10, product.amount) product = five.times(3) sel…

テスト駆動開発入門をPythonで写経してみた。 2

第2章 #coding : utf-8 """ テスト駆動開発入門2章 """ import unittest class TestMoney(unittest.TestCase): def testMultiplication(self): five = Dollar(5) product = five.times(2) self.assertEqual(10, product.amount) product = five.times(3) sel…