Index: [Article Count Order] [Thread]

Date:  Sat, 3 Jun 2000 14:21:15 +0900
From:  "Ken N." <kenn@....nu>
Subject:  [XP-jp:00457] Re: XP Installed 26 Test-first, by Intention 紹介
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <200006030520.OAA27001@....nu>
In-Reply-To:  Your message of "Sat, 3 Jun 2000 11:56:00 +0900".    <3937DD041BC.E60AY-KAMITE@....jp>
Posted:  Sat, 3 Jun 2000 14:20:57 +0900
X-Mail-Count: 00457

In <3937DD041BC.E60AY-KAMITE@....jp> (Jun.03 2000 11:56 JST),
``[XP-jp:00453] XP Installed 26 Test-first, by Intention 紹介'',
y-kamite@....jp says:

=   我々はすぐにテストに戻る。
=   #以下不明。コンストラクタをつくろうと言っているのか?

だとおもいます。


=   Ron  一つのemptySummarizer(オブジェクト)にはSumの2つのcollection
=   がいるね

「... その2つのSumに初期値を与えてやるように、コンストラクタを
書かないといけないね」といっているのでしょう。で、

=   Chet first:second:
=   Ron  with:with: はどうだい

「... という名前のメソッドにしよう」と言っているわけですね。
そしてその意向を、

=   emptySummarizer
=        ^Summarizer
=            with:#()
=            with:#()

のように、まず書いてしまう。そういう事でしょう。


=   summary
=       ^first,second
=   
=   Chetは二つの入力コレクションを連結して答えた。これはたぶん動くであろう最
=   も単純なことだ。
=   #以下意味不明
=   空のコレクションを書いてそれを返す方がより単純だが、Chetは変数に手をかけ
=   た。

``summary''メソッドに仮の実装を与えるのに、「空のコレクション
を書いてそれを返す方がより単純だが」、Chetは「(firstとsecondの)
二つの入力コレクションを連結して答えた」という事だと思います。


=   abcSummarrizer
=        ^Summarizer
=            with:self acCollection
=            with:self abCollection
=   
=   (#p198) 
=   
=   Chetは考えるのに必要な時間をちょっと使い彼の意向をメソッドの中に宣言した。
=   つまり、aとc aとbを持つコレクションを一つづつ持つようにした。そてマジック
=   elf(self?:これも誤植かも>>ホソカワさん)がそれを創ったことを想定する。

``elf''だとおもいます。
これも「意向によるプログラミング」の例ですね。``acCollection''
と``abCollection''というメソッドを利用するという意向を、まるで
あたかもそれらのメソッドが既に存在しているかのように書き下して
いくわけですが、その「あたかも既にあるかのように」というのを、
「elfが作っといてくれたことにでもしておこう」と表現しているの
でしょう。


=   Chet OK、summaryを実際にやろう。どうやる?
=   Ron  firstコレクションにいって、その要素を全部 summaryコレクションに移そ
=   う。それからsecond コレクションで、要素がsummaryの中にあればそれを追加し
=   て、そうでなければ中にいれよう。(#意味不明)

1.  Summerizerクラスがfirstとして保持しているSumの要素を全部取
    得する。
2.  同じくsecondとして保持しているSumの要素をひとつづつ取得す
    る。
    a.  既に取得済の要素と(nameが)一致するなら(amountを)加算する。
    b.  そうでなければ取得済の要素に付け加える。

といったところでしょうか。
冒頭で定義されているタスクの中核部分ですね。


=   #以下のやりとりの意味不明
=   Chet 検出!
=   Ron  そう、検出・・
=   Chet そして ifAbsent:
=   Ron  inNone:
=   Chet どっちかわからない

OrderedCollectionクラスのメソッド名の確認でしょうね。
「検出」は訳さずに「detect」のままのほうがいいとおもいます。


=   matchingSum:aSum
=        ^summary
=            detect:[:each|each name = aSum name]
=            ifNone:[summary add:(Sum
=                 name:aSum name
=                 amount:0)]


 -.- . -. -.
Ken Nakagaki (kenn@....nu is NOT for private E-Mail)
「人は船ではない。人は会社ではない」-- Gerry Spence