続々・アナログ Java 思考からディジタル Jython 思考への扉を開く

記事一覧|Oh 脳: after ZERO《其之佰拾玖》
続々・アナログ Java 思考からディジタル Jython 思考への扉を開く

《監修》小泉ひよ子とタマゴ倶楽部

関連記事
From: 	ひよ子のきもち 
件名:	《セミナー通信》受講者のみなさんへ@2009/07/02
日付: 	 2009/07/02 18:42

------------------------------(きりとれません)------------------------------
7月に入り、はや今年も折り返しですね。今回は「頭の体操」から…


セミナー受講者のみなさんが「苦戦」した問題の一部を、以下に掲載します。「アナログ Java 思考からディジタル Jython 思考への扉は開いてますか?」自己チェックしてみてください。(^.^)/~

《余録》Java の常識は OOP の非常識

(A) if stone.state == state: 
(B) if stone.state != (not state): 

A/Bは等価ではありません。その理由を述べてください。

(C) if stone.geom.point > point: 
(D) if point < stone.geom.point:

C/Dは等価ではありません。その理由を述べてください。


... zap ...
前回、Jython2.5.0 リリースを伝えたばかりですが、すでに Python3.1 の時代です。Python プログラマーにとって、Jython2.5.0 は先祖返りに過ぎません。が、Java プログラマーには、Java SE 7 を待たずに、新機能の恩恵に浴するなどのメリットがあります。

Jython2.5.0 リリースを機に、過去のセミナー課題を改訂しているときでした。「オセロゲーム」課題は、Java/Swing フレームワークを理解してもらうために用意したものです。Jython2.5.0 でも問題なく動きます…とコメントを添えるだけのつもりでした。が、旧いソースコードを介して、過去の自分とペアプログラミングを始めると、アドバイスをせずにはいられません。

そこで、Jython2.5.0 対応版では(クロージャーを導入するなど)GoF が伝えなかったデザインパターンの世界〔GoForward〕を理解してもらうために、新装「改訂」版を受講者のみなさんに披露しました(プログでも公開準備中です)。

... zap ...
閑話休題。前回は

Python には、伝統的なC言語風の for 文や悪名高い switch 文がありません。それには理由があります。その理由のひとつは、これらが「コードの汚染」を誘発するからです。

に端を発して

話を進める前に、ひとつ注意しておきたいのは、Python にも for 文はあります。しかし、これはC言語風の for 文とは異質のものです。

で中座しました。Jython2.5.0 では、クロージャーや高階関数を利用できます(旧くからある仕様で、Jython2.5.0 の新機能ではありませんが)。Gosling の言葉を信じるなら「クロージャーは 2010 年までお待ちください」となります。が、それまで「待てない」という状況もあります。

余談ですが、口頭で「コウカイ関数」と聞いて「公開関数」と解釈された Java プログラマーと話が噛み合ない…という「後悔」話を、自戒を込めて受講者のみなさんに披露しましたよね。


閑話休題水は高い所から低い所へ流れると言われます。あるコミュニティーでは「目新しい」話題も、他のコミュニティーでは「何を今さら」という事例には、枚挙に暇がありません。

Python プログラマーには「何を今さら」ですが、Jython プログラマーの多くは「Java 出身者」という事情もあります。Jython プログラマーにとって、クロージャーは「近未来の出来事」ではなく、JPython の時代からの恩恵であり「未来の思い出」のひとつに過ぎません。

ちなみに、クロージャーとの個人的な出会いは、Smalltalk を知った 1980 年代後半まで遡ります。それでも、Lisp に従事された諸先輩から見れば、十年は遅れていたことになります。2000年を機に独立してから、Java での開発にも従事します。あまりの「開発効率(生産性)の低さ」に悲鳴を上げるしかなかった一因には、Java ではクロージャーを利用できないことがあります。2003年に Jython を導入するまで「苦悶の日々が続いた」様を想像してください。

卑近な例を挙げると、それは iPod の時代にアナログ Walkman に興じるようなものです。iPod が故障して、埃を被った Walkman を取り出す様を想像してください。つまり、iPod が修理から戻る(Jython を導入する)まで3年近くも待たされたわけです。クロージャーを取り上げられた間の苦悩は、あなたの上司に 2010 年まで iPod を取り上げられるようなものです。もっと早く導入していれば…と後悔しても後の祭りです。青春の思い出と違って、感傷に浸っている暇はありません。今からでも遅くはありませんよ。

伝統的な for 文を排して(Java 風に表現するなら)拡張 for 文によって「コードの汚染」は一部解消されます。実現方法に依存する知識がなくても、プロトコルに精通していれば、コードを記述できるからす。しかし、特定のプロトコルに依存するハードコーディングの問題が残るので、「コードの汚染」が減速することはあっても、本質的な解消には至りません。しかし、クロージャーを導入するなら、拡張 for 文さえも排除できます。もとより、for 文がないのですから「コードを汚染」しようもなく、for 文の不吉な匂いを嗅ぎ付けてバグも寄って来ないわけです。


... zap ...
ようやく、伝統的なC言語風の for 文や悪名高い switch 文、配列の呪縛から解かれ、オブジェクト指向プログラミングの醍醐味を堪能できる準備が整いました。ここはまだゴールではなく、通過点です。はじめの一歩から末の千里へ。「アナログ Java 思考からディジタル Jython 思考へ」のパラダイムシフトの旅は、次回のセミナーで佳境に向かって加速します。


p.s.
Jython で得られる恩恵は、クロージャーだけではありません。Java プログラマーを見掛けたら「まだ for/switch 文を使ってるんですか?」と言ってあげましょう。すると、君は女子社員から羨望の眼差しで…って、なんだか「見栄講座」っぽい展開になってきたので、今回はこの辺で。

p.p.s.
「見栄講座」を知らない世代のスタッフ(小粒ちゃん)に囲まれているのも紛れもない「現実」ですが。(^^)

  • -