Comments
Description
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 版