« 連載: Smalltalk use: better《14》true/false が Boolean でないのは | トップページ | 気軽に Jython《00》学習を始める前に:ターミナル編 »

2006年5月26日 (金)

連載: Smalltalk use: better《15》そして True/False が生まれる

キーワード ◆ Boolean・False・ifTrue:ifFalse:・True・パッチワーク・思考フレーム・統合開発環境

※ PDF でご覧になるなら ⇒ 「piyo60526.pdf」をダウンロード

------------ 序 ------------

高橋「テレビと高橋の講義には気を付けよう…ということだと思います」

放送大学・国際政治(’04)高橋和夫
第1回 テレビと国際政治〜もうだまされないために〜

◆ 韓流ブームの火付け役ともなった「冬ソナ現象」は、まだ記憶に新しいところです。しかし、その内容には、昭和40年代に放映されたドラマを寄せ集めた、パッチワークを見せられる思いがします。かと思えば、日本沈没 (1973)、犬神家の一族(1976)、戦国自衛隊(1979)、南極物語(1983) など、さまざまな作品がリメイクされています。私などは、つい懐かしさが先行して見入ってしまいますが、その当時を知らない人たちには、新鮮な感動を誘うのでしょうか。

◆ 格差社会は、IT 業界も例外ではありません。Java/Eclipse や C#/VisualStudio の生産性の低さには居た堪れず、先祖返りを見せられる思いがします。これらの開発環境を見ていると、南極物語と同じ年に公開された Smalltalk-80 には遠く及ばず、その格差には愕然とする思いです。本来の統合開発環境は、このような際物ではなかったはずです。もう騙されないためにも…。もちろん、Smalltalk だけがその選択肢ではなく、Allegro Common Lisp など、真の統合開発環境と呼べるものも、いくつか存在します。知ってる人だけが得をする。知らないあなたは…。

◆ 十数年前(1988-1990年)に作成したセミナー資料をもとに、連載記事(復刻改訂版)として公開しました。当時のセミナー受講者のみなさんも、今では最前線でご活躍のことと思います。初めてご覧になったみなさんは、十数年前に作成した記事を見て、どのように感じられたでしょうか。この連載が、旧くて新しい Squeak/Smalltalk を知る一助となれば幸いです。

------------ 本文 ------------

ifTrueifFalse := [:bool :trueBlock :falseBlock |
    bool    ifTrue: [trueBlock value]
        ifFalse: [falseBlock value]].
ifTrueifFalse value: true
    value: [3 factorial] value: [3 negated].        "6"
ifTrueifFalse value: false
    value: [3 factorial] value: [3 negated].        "-3"

true
    ifTrue: [3 factorial] ifFalse: [3 negated]      "6" 
false
    ifTrue: [3 factorial] ifFalse: [3 negated]      "-3"

60526a_2 ◆ メッセージ ifTrue:ifFalse: に相当するブロック ifTrueifFalse を用意します。すると、メッセージ式 ifTrueifFalse value: true value: [3 factorial] value: [3 negated] は、true ifTrue: [3 factorial] ifFalse: [3 negated] に相当します。

◆ クラス Boolean で実現する場合について考えます。(1)ブロック引数 bool は、Boolean のインスタンスと仮定した true/false を束縛します。(2)bool が参照するオブジェクトに、ifTrue:ifFalse: を伴うメッセージを送ります。(3)true なら、ブロック引数 trueBlock が束縛するブロックを評価します。(4)false なら、ブロック引数 falseBlock が束縛するブロックを評価します。

◆ と、ここまでは、これまでの話とさして変りはありません。では、問題です。今、ここで用意したブロック ifTrueifFalse は、に相当するものでしょう。その答えは、まさに、ifTrue:ifFalse: そのものです。つまり、自身を実現するために、自身の実現が前提となっているのです。この「鶏が先かタマゴが先か」その解決策のひとつとなるのが、true/false を Boolean のインスタンスにしないということです。こうして、クラス True/False の存在意義が生まれます。

ifTrueifFalse := [:trueBlock :falseBlock | trueBlock value].
ifTrueifFalse
    value: [3 factorial] value: [3 negated].        "6" 

true
    ifTrue: [3 factorial] ifFalse: [3 negated]      "6" 

60526b_1 ◆ クラス True で実現する場合について考えます。このとき、false について考慮する必要はありません。なぜなら、true が、そのクラスの唯一のインスタンスだからです。

◆ すると、メッセージ value: [3 factorial] value: [3 negated] を受け取ったときに、単に、1番目のブロック式を評価するだけでよくなります。

◆ ブロック ifTrueifFalse は、true のために用意したものです。メッセージが正しく伝達されることを保証するのが、オブジェクト true 自身の存在なのです。

ifTrueifFalse := [:trueBlock :falseBlock | falseBlock value].
ifTrueifFalse
    value: [3 factorial] value: [3 negated].        "-3"

false
    ifTrue: [3 factorial] ifFalse: [3 negated]      "-3"

60526c_1 ◆ クラス False で実現する場合について考えます。このとき、true について考慮する必要はありません。なぜなら、false が、そのクラスの唯一のインスタンスだからです。

◆ すると、メッセージ value: [3 factorial] value: [3 negated] を受け取ったときに、単に、2番目のブロック式を評価するだけでよくなります。

◆ ブロック ifTrueifFalse は、false のために用意したものです。メッセージが正しく伝達されることを保証するのが、オブジェクト false 自身の存在なのです。

------------ Epilogue ------------

       
    初めての人のためのLISP    
    Book                                                                                                                 
        初めての人のためのLISP        
        著者        
竹内 郁雄
販売元
サイエンス社
定価(税込)
¥ 2,520

◆ なぜ Lisp の本が、それには深い訳が…。Lisp を知ると、Smalltalk が見えてきます。Lisp を知るには、5つのブリミティヴについて理解することが肝要です。すると、Lisp の世界を理解するときの思考フレームが、そのまま Smalltalk の世界を理解するための強力な武器(道具立て)となります。

◆ 連載開始時の予定(全20回)では、コレクションフレームワークまでを紹介するつもりでした。しかし、予定した以上に記事が膨らんでしまい、あと5回でそこまで紹介できなくなってしまいました。そこで、残したテーマは、続編(シーズン2)で紹介することにします。それまで待てない…というみなさんは、参考文献をご覧になってください。

◆ ひとまず連載を終えるにあたって、次の言葉を紹介しておきます。

Messages are the heartbeat of a Smalltalk program.

Kent Beck

ひよ子「あとって言い訳でしょ」 育未「ご、よ…」

==================================
真樹育未 著 ◆ 監修:小泉ひよ子とタマゴ倶楽部

|

« 連載: Smalltalk use: better《14》true/false が Boolean でないのは | トップページ | 気軽に Jython《00》学習を始める前に:ターミナル編 »

JML/Java/Eclipse」カテゴリの記事

Squeak/Smalltalk」カテゴリの記事

C#/Visual Studio」カテゴリの記事

.連載: Smalltalk use: better」カテゴリの記事

Allegro Common Lisp」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 連載: Smalltalk use: better《15》そして True/False が生まれる:

« 連載: Smalltalk use: better《14》true/false が Boolean でないのは | トップページ | 気軽に Jython《00》学習を始める前に:ターミナル編 »