株式会社ユーザベースの技術チームブログです。テスト駆動開発Tweet今日は。SPEEDAの開発をやっている濱口です。SPEEDA開発チームではテスト駆動開発(TDD)、ペアプログラミングを徹底しています。『テスト駆動開発』はすごく楽しく読めました。読者側も、著者の意図をひとつずつ理解しながら読み進めていけるようになっています。ハンズオンがよりアクティブ・ラーニング化されると考えました。プログラミング言語の翻訳プロセスを挟むことで、より能動的なハンズオンになるはずです。古くてあたらしい言語(環境)、Smalltalkにふれたい今回、私はプログラミング言語にSmalltalkを選択しました。今回はより純粋なTDD、およびオブジェクト指向プログラミング(OOP)体験を求めてそうしました。Smalltalkは開発環境も内包していることから、IDEの源流みたいなものにも触れられると考えたからです。環境はPharoを使いました。このハンズオンを行い、ソースコードを管理する限りでは、Pharo単体で完結しました。Pharoの開発環境。ここですべてが完結します。Started」にひと通り目を通せば書き始められました。Pharo自身を含むすべてのソースコードと自分の書いたコードは全く同じ扱いになるため、「自分の設計・実装が、そのまま既存のクラスライブラリの拡張になる」という意識づけが自然になされます。既存のクラスライブラリに分け入って、自分の設計を環境になじませる必要性を常に感じることになります。Browser、Finderなどの各種ツールが上記のような探索的開発をサポートしてくれます。今回は、メッセージの命名やプロトコルの整理などの作法を中心に既存のコードを参考にしました。写経!Smalltalkでは、わりと忠実な写経が可能だった一通りハンズオンをこなしてみて、思ったより忠実な写経が出来上がった印象です。いえ、そもそも言語が異なるのでやはり違いはありました。途中、特に気になった差異をいくつか挙げます。Javaのコンストラクタのような特別なメソッドが無い例えば、5ドルを現すオブジェクトのインスタンスが欲しい場合、以下のようにします。5これを実現(コンストラクト)するコードは以下になります。Methodパターン)。-privateにカテゴライズするところが肝だと考えています。インスタンス変数のスコープと意図を伝えるためのプロトコル上記でも登場したMoneyクラスの定義は以下になります。#'Example-TDD'}Smalltalkではインスタンス変数のスコープはすべてJavaでいうprivate、またはprotectedになります。Methodを介すことになります。amount]ただ、そのメソッド自体はアクセス制限されません(publicになります)。privateプロトコルにカテゴライズすることでこのクラス以外から使用されない意図を伝えます。「テスト対象オブジェクトの新しい機能を使い、テストコードとプロダクトコードの間の結合度を下げた。」という目的に適うタスクになります。型が無い(untyped)一番の違いはこれかと思います。Smalltalkでは型が無く、かつ処理を全てメッセージ送信で表現するため、メッセージのシグニチャ(もちろん、それに型は含まれない)だけで多態を実現します。Javaのインタフェースのようなものが無い、というか必要無いです。以下のようにSumとMoneyが等しくreduceTo:メッセージに応答するようにするだけです。aCurrency]上記の違いはありましたが、このハンズオンが意図する本筋から外れるものはなく、1章ずつステップバイステップで進めていけました。(章ごとに出来上がったコードのスナップショットはコミット単位で分けています)個人的にはSmalltalkのシンプルが気に入ったので、この本をさらに読み進めるのと、今まで読んだOOP関連の本(『実装パターン』など)をSmalltalk視点でもう一度読み直すなどし、SmalltalkでOOPやTDDをしばらく学んでみたいと考えています。単一責任のクラスを設計する」をハン...今日は。開発している濱口です。»プロフィール『経済情報で、世界を変える』をミッションに、企業・業界情報プラットフォーム「SPEEDA」やソーシャル経済ニュース「NewsPicks」、ABMを強力にサポートする「FORCAS」、スタートアップの情報収集を圧倒的効率化「entrepedia」などを提供する株式会社ユーザベースの技術チームブログです。多国通貨」をハンズオンしたら快適で楽しかったGo言語でオブジェクト指向プログラミングの基本(型編)月別アーカイブ検索@Uzabase_Techさんのツイートスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。