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