Java.use(better,Python)《1》Jython はじめました

記事一覧《こちらに移動中です》2006年9月 4日 (月)

Java.use(better, Python) # Jython はじめました

《1》Jython はじめました《Jython2.5.0》

《著》伊藤うさぎ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23

■ 概要

プログラマーにとっての「地デジ」対応は進んでいますか? ここでは、アナログ世代(Java/C#)からディジタル世代(Ruby/Python)への脱皮を目指して、「真のアジャイル対応」への準備を怠りない、プログラマーのみなさんを支援する話題を提供します。Java/C# が抱える深刻な問題は「対岸の火事」とばかりも言っていられません。Java/C# の常識は、オブジェクト指向の非常識。さあ、ご一緒に「真のオブジェクト指向」の世界へと続く扉を開いてみませんか。

Jython はじめました

まず、Jython で記述された、次のコードを見てください。



def something_to_do(e):
    print "***** Welcome Agile World! *****"
    print Date()

f = JFrame(
    title = "Shall we Agile?",
    size = (300,200),
    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 行のコードから、JavaJython との違いを学べます。Java プログラマーのみなさんは、これと同等のコードを Java で記述するとどうなるか、想像しながら読み進めてください。
 全体を眺めると、記述されたコードがすっきりとしているが分かります。まず、文末を表わす冗長なセミコロン ; が不要です。そして、C 言語に象徴され、Groovy にも踏襲された冗長な {...} も不要です。さらに、Pascal に象徴され、Ruby にも踏襲された冗長な begin...end も不要です。これらのプログラミング言語に親しみがあると、かえって戸惑いを覚えるかもしれません。しかし、そこには dangling-else と呼ばれる落とし穴があって、見た目の印象との違いに悩まされたりするものです。PythonWYSIWYG 言語と呼ばれる所以は、ここにあります。見た目の印象を素直に反映しているところに、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 のエッセンスを兼ね備えた、アジャイル開発向きのグルー言語が多数存在しています。

Last updated♪2009/08/08