...

《1》Python/Jython はじめました〔改訂版〕

by user

on
Category: Documents
7

views

Report

Comments

Transcript

《1》Python/Jython はじめました〔改訂版〕
Shall_we_Agile = Java.use(better, Python) # Swing
《1》Python/Jython はじめました〔改訂版〕★
伊藤うさぎ/小泉ひよ子
まず、Jython で記述された、次のコードを見てください。
from java.util import *
from javax.swing import *
def something_to_do(e):
print "***** Welcome Agile World! *****"
print Date()
f = JFrame(
title="Shall we Agile?",
size=(600,640),
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
b = JButton(
icon=ImageIcon("image/moon.jpg"),
text="Are you happy?",
actionPerformed=something_to_do)
f.add(b)
f.visible = True
このコードを実行すると、ウィンドウが現れます。そこで、ウィンドウ内をクリック
すると、次のような日時がコンソールに出力されます。
***** Welcome Agile World! *****
Sun Sep 03 10:53:01 JST 2006
16 行のラブソング
このわずか(空行も含めて)16 行のコードから、Java と Jython との違いを学べ
ます。Java プログラマーのみなさんは、これと同等のコードを Java で記述するとど
うなるか、想像しながら読み進めてください。
全体を眺めると、記述されたコードがすっきりとしているが分かります。まず、文末
を表わす冗長なセミコロン ; が不要です。そして、C 言語に象徴され、Groovy にも
踏襲された冗長な {...} も不要です。さらに、Pascal に象徴され、Ruby にも踏襲さ
れた冗長な begin...end も不要です。これらのプログラミング言語に親しみがある
と、かえって戸惑いを覚えるかもしれません。しかし、そこには dangling-else と
呼ばれる落とし穴があって、見た目の印象との違いに悩まされたりするものです。
Python が WYSIWYG 言語と呼ばれる所以は、ここにあります。見た目の印象を素
直に反映しているところに、Python で記述たれたコードの魅力があります。冗長な
{...} や begin...end に煩わされることなく、Smalltalk などと同様に、見通しの
良いコードの恩恵が受けられます。しかし、その恩恵は、このように些細なものだけで
はありません。
ここで、コードの動作を確認しておきます。フレーム内に配置されたボタンをクリッ
クすると、メッセージとともにそのときの日時が、コンソールに出力されます。
では、細部を眺めます。最初の2行を見ると、これが Python ではなく、Jython で
記述されたコードであることが分かります。Java プログラマーには親しみのある、
java.util および javax.swing といったパッケージを再利用できるのが、Jython
の魅力のひとつです。これによって、Java の生産性の低さを、Python の快適さで
補って余りあるものとします。
次の数行(後述)を読み飛ばして、インスタンスを生成するときに、さまざまな値を
簡単に設定できる様子を眺めます。
最初に、フレーム JFrame を生成します。タイトル title= には、文字列を指定し
ます。文字列は、引用符の中に記述します。大きさ size= には、タプルを指定しま
す。タプルを使うと、複数の値からなる組(幅と高さ)を指定するのも容易です。ウィ
ンドウを閉じるときの動作 defaultCloseOperation= には、定数 EXIT_ON_CLOSE
を指定します。Java における静的定数も、他と同様に再利用できます。
次に、ボタン JButton を生成します。アイコン icon= には、生成したばかりの
ImageIcon のインスタンスを指定します。クラスもオブジェクトとして扱えるので、
冗長な演算子 new は不要となり、他のメソッド呼び出しと同様の構文規則に従いま
す。テキスト text= には、ラベルとして表示したい文字列を指定します。ボタンをク
リックしたときの動作 actionPerformed= には、関数を指定します。関数もオブジェ
クトとして扱えるので、他の値と同様の構文規則に従います。
ここで、先ほど読み飛ばした行に戻ります。すると、something_to_do は、新た
に定義した関数だと分かります。そこでは、Java プログラマーには親しみのある
java.util.Date を使って、現在の日時が得られます。
最後に、ウィンドウを表示するのですが、ここでは値を直接設定しているのが分かり
ます。setXX() と記述すべきところを、直接設定できてしまうことに、戸惑いを覚え
るかもしれません。Swing では、JavaBean に準拠したコンポーネントを提供して
います。この規定に従うなら、Jython では冗長な get/set は不要です。C# における
プロパティーと同様に、より洗練された表現が可能となります。
アジャイル言語としての Jython
システム分析設計にアジャイル開発手法を導入しても、Java/C# でコードを記述し
ていたのでは、そこで失速してしまいます。ハイブリッド型とも呼ばれる Java/C# で
は、構造化プログラミング(SP)とオブジェクト指向プログラミング(OOP)との両
刀使いが可能です。しかし、そのままでは、より洗練された OOP の恩恵が受けられま
せん。たとえば、ハイブリッド車を設計するときには、ガソリンと電気との効率を考慮
した中庸を選択さぜるを得ません。純粋な電気自動車の特徴を活かすには、これとは別
のより最適な設計が可能です。同様に、洗練された OOP の特徴を活かすには、ハイブ
リッド型の Java/C# とは違った設計にも配慮する必要があります。
Java.use(better) を謳い文句とするこの連載では、Java でのシステム開発を加速す
る、さまざまな話題を提供します。Jython は、その話題を提供するための手段のひと
つにすぎません。このほかにも、JRuby や Jacl など、より洗練された OOP の
エッセンスを兼ね備えた、アジャイル開発向きのグルー言語が多数存在しています。
《ひよ子のきもち♪2006/09/04》
♪変更履歴
【2007/05/20】PDF 版
Fly UP