Jythonとの遭遇:はじめまして
以下の内容は「Python/Jython入門」を意図したものではありません。Jythonで可能性が広がるJavaプログラミングの世界を概観するのが目的です。

深く考えずに次のコードを見てください。何をしているか分かりますか。
>>> from javax.swing import *
>>> f = JFrame()
>>> f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
>>> f.setSize(150, 100)
>>> f.setTitle("Jython")
>>> f.setVisible(True)
Swingを利用したコードの断片とどこか似ています。「>>>」とあるのは、対話モードにおけるプロンプトです。つまり、Jythonを利用すると「Java擬の対話型インタプリタ環境」を手に入れたことになります。この現実は初心者にも朗報です。Swingの本質をコマンド感覚で疑似体感できるので、学習環境としても最適です。先に説明したように、コンパイルして実行することもできるので、インタプリタとの棲み分けが可能です。
from javax.swing import *
f = JFrame()
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
f.setSize(150, 100)
f.setTitle("Jython")
f.setVisible(True)
このコードをテキストファイル「example.py」に保存した後で、UNIXのターミナルが目の前にあるなら、次のコマンドを入力するだけです。
% jython example.py
そこにC#が現われて
C#プログラマーがこのコードを見たら「プロパティを使えば簡単なのに」と歯痒い思いをするでしょう。JavaBeansに準拠するなら、get.../set...は、同じ名前のインスタンス変数にアクセスするときの常套句です。例えば、titleを獲得/設定するには、それぞれメソッド呼び出しgetTitle/setTitleを利用します。
ここでC#プログラマーなら、冗長なget/setを排してプロパティを利用するでしょう。すると、次のように簡潔に表現できます。
from javax.swing import * f = JFrame() f.defaultCloseOperation = JFrame.EXIT_ON_CLOSE f.size = 150, 100 f.title = "Jython" f.visible = True
このように、JavaBeansに準拠するリソースを再利用するときには、Jythonでは簡略表記が可能です。すると、Javaの言語仕様が拡張されるより一足先に、C#プログラマーと同様の恩恵に浴することができます。
そこにPythonが現われて
Jythonは、PythonのDNAを継承しています。それなら、その特徴を利用しない手はありません。
from javax.swing import *
JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
size=(150, 100), title="Jython", visible=True)
ここでは、インスタンスを生成するときに、初期設定を済ませています。ウィンドウを表示させるだけなら、これで十分です。贅肉を削ぎ落とした、体脂肪率一桁のアスリートの肉体美を思わせる、洗練された見通しの良いコードを記述できます。
そこをRubyが素通りして
シカトされたのかしら(nani wo ima-sara ...)。
Jythonとの遭遇:昨晩お会いしましょう
先に示したコードの断片は、Javaの言語仕様に飽き足らず、他の言語のイイトコ取りができる、ほんの一例にすぎません。まさに、glue言語の面目躍如です。
Jythonの世界では、Javaより一足先に、拡張for文の恩恵に浴することができました。Javaに演算子のオーバーロード機能がないのは、開発者の美学です。しかし、それを切望する人々には、不満が募ります。もし望むなら、Jythonを介して演算子のオーバーロードさえも可能です。R指定はありません。Ruby/Pythonプログラマーなら堪能できる、大人の世界を覗いても、コンパイラに叱られることはないのです。
既にJythonの恩恵に浴していたプログラマーは、後のJavaの言語拡張を懐かしい想いで迎えたものです。今でも、Jythonを通して、拡張されるJavaの言語仕様の近未来を予見できます。
「初めまして。昨晩お会いしましたね」
