Index: [Article Count Order] [Thread]

Date:  Sun, 4 Jun 2000 01:33:11 +0900
From:  "Ken N." <kenn@....nu>
Subject:  [XP-jp:00468] Re: FW: XP Installed Smalltalk Code Samples inJava
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <200006031632.BAA02256@....nu>
In-Reply-To:  Your message of "Sat, 3 Jun 2000 23:48:32 +0900".    <B55F2EEA.1ABA%khosokawa@....com>
Posted:  Sun, 4 Jun 2000 01:32:53 +0900
X-Mail-Count: 00468

In <B55F2EEA.1ABA%khosokawa@....com> (Jun.03 2000 23:48 JST),
``[XP-jp:00460] Re: FW: XP Installed Smalltalk Code Samples inJava'',
khosokawa@....com says:
=   
=   もし良ければ、どなたかに作業の担当して頂きたいのですが、量が多いので4ページ
=   単位に分割しました。(もちろん、一気に全部でもけっこうです。)いつものように
=   担当者表を作成しましたので、MLで宣言して頂けば、私が表をアップデートします。

ちょっとどんな感じになるか知りたかったので、Smalltalkのコード
だけ抽出してみました。各コードには、

    "クラス名(番号)"

のように付記してあります。
(同一のコードの改版もありますが、あくまで管理用ということで)


=   ページ             まとめ  Java への変換担当者
=   ----------------------------------------------
=   Part 1 189 - 192   上手

"Sum(1)"
Object subclass:#Sum
instance variables:'name amount'

"Sum(2)"
^self new
     setName:aString
     amount:aNumber

"Sum(3)"
name:aString amount:aNumber
    ^self new
         setName:aString
         amount:aNumber

"Sum(4)"
setName:aString amount:aNumber
     name:=aString
     amount:=aNumber

"Sum(5)"
name
    ^name

"Sum(6)"
amount
    ^amount


Part 2 193 - 196   上手

"SummarizerTest(1)"
testEmpty
    |summarizer|
    summarizer:=self emptySummarizer.

"SummarizerTest(2)"
testEmpty
    |summarizer|
    summarizer:=self emptySummarizer.
    self should:[summarizer summary isEmpty]

"Summarizer(1)"
Object subclass:#Summarizer
instance variables:'first second'

"SummarizerTest(3)"
emptySummarizer
     ^Summarizer
         with:#()
         with:#()

"Summarizer(3)"
with:firstCollection with:secondCollection
      ^self new
           setFirstCollection:firstCollection
           secondCollection:secondCollection

"Summarizer(4)"
setFirstCollection:firstCollection secondCollection:secondCollection
      first:=firstCollection
      second:=secondCollection

"Summarizer(5)"
summary
    self halt

"Summarizer(6)"
summary
    ^first,second

"SummarizerTest(4)"
testABC
     "self unsafeRun:#testABC"
     |summarizer|
     summarizer:=self abcSummarizer.
     self should:[summarize summary size=3]


Part 3 197 - 200   上手

"SummarizerTest(5)"
abcSummarizer
     ^Summarizer
         with:#()
         with:#()

"SummarizerTest(6)"
testABC
     "self unsafRun:#testABC"
     |summarizer summary|
     summarizer:=self abcSummarizer.
     summary:=summarizer summary.
     self should:[summary size=3].
     self should:[summary first name='a'].
     self should:[summary first amount=11].
     self should:[(summary at:2) name='c'].
     self should:[(summary at:2) amount=2].
     self should:[summary last name='b'].
     self should:[summary last amount=3].

"SummarizerTest(7)"
abcSummarrizer
     ^Summarizer
         with:self acCollection
         with:self abCollection

"SummarizerTest(8)"
acCollection
     ^OrderdCollection
         with:(Sum
              name:'a'
              amount:1)
         with:(Sum
              name:'c'
              amount:2)

"SummarizerTest(9)"
abCollectio
     ^OrderdCollection
         with:(Sum
              name:'a'
              amount:10)
         with:(Sum
              name:'b'
              amount:3)

"Summarizer(7)"
summary
    self
         processFirst;
         processSecond

"Summarizer(8)"
setFirstCollection:firstCollection secondCollection:secondCollection
      first:=firstCollection
      second:=secondCollection
      summary:=OrderedCollection new

"Summarizer(9)"
summary
    self process:First.
    self process:Second

"Summarizer(10)"
process:aCollection
     aCollection do:[:each|self processItem:each]

"Summarizer(11)"
processItem:aSum

"Summarizer(12)"
processItem:aSum
     (self matchingSum:aSum)add:aSum


Part 4 201 - 204   上手

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

"Summarizer(14)"
add:aSum
     amount:=amount + aSum amount

"Summarizer(15)"
summary
    self process:first.
    self process:second.
    ^summary

"Summarizer(16)"
summary
    self summarize:first.
    self summarize:second.
    ^summary

"Summarizer(17)"
summarize:aCollection
     aCollection do:[:each|self summarizeItem:each]

"Summarizer(18)"
summarize:aCollection
     aCollection do:[:each|self processItem:each]

"Summarizer(19)"
summarize:aCollection
     aCollection do:[:each|self summarizeItem:each]

"Summarizer(20)"
summarizeItem:aSum
    (self matchingSum:aSum)add:aSum


以上だと思います。抜けがあったら申し訳ありません。
どれも短いコードですが、こうしてまとめてみると、やはりそれなり
の量があるものですね。


=   #ちょっと不安なのが、 Java の修正、コメントが入り乱れて、収拾がつかなくなる
=   かもしれませんね。

何か、簡単な表記上の約束ごとを作ると良いかもしれません。
一番簡単なのは行頭になんらかのマークをいれる方法ですが、これだ
とMailの引用とごちゃごちゃになりそうです。あるいは、SGMLやXML
ライクに<コメント>...</コメント>とかですか。(私は\begin{foo} ...
\end{foo}とかのほうが好きですが。)


それから、Smalltalkのコードの理解には、SRAの青木淳さんのWeb
presenceも役に立つとおもいます。

    http://www.sra.co.jp/people/aoki/SmalltalkIdioms/

あと、オージスさんの「オブジェクトの広場」にも、何か情報があっ
たようにおもいますが、今ちょっとURLが思い出せません。


#全然関係ありませんが、.NUドメインに関しては、
    http://www.nunames.nu/
    http://www.nihongo.nu/
 などが参考になると思います ;-)


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