こんにちは、昨日prototype.jsを使えよ!ってG10 Readerの開発者michiに言われたので使ってみて、感動したtanakaです。このコーナーでは基本的にPの付く言語を取り上げます。よろしくお願いします。
Ajaxを使わないと実装できないような機能を作るときの煩雑さも避けることができます。
さて、本当のことをいいますと、僕は入社までPHPを触ったことが一切ありませんでした。(汗
入社以前にはPythonを使って趣味のコードを書いたりしていたので、Webアプリケーション独特の状態遷移や、ステートの保持を理解するのに多少の時間がかかったのです。
prototype.jsでJavaScriptのコードを集中的にさわるのも初めてだったのですが、PythonにもJavaScriptにも[ThinkIT] 第2回:JavaScriptの復習 (1/2)にあるような機能があります。つまり、関数もオブジェクトであり、変数に代入可能で、そして、その変数は呼び出し可能になる、といった機能です。以下のコードをご覧ください。
JavaScript(Firebugコンソール)
>>> function func(){alert("hoge");}
>>> f = hoge
hoge()
>>> f()
Python(IDLE・Windows)
>>> def hoge():
print "hoge"
>>> f = hoge
>>> f()
hoge
こんな機能が何の役に立つのでしょう?ひとつ例をあげるなら、ソート関数に、比較関数を渡してあげるときでしょうか。ソート関数はあらかじめ作成されていて、比較判定する関数を自分で作ったようなときです。Sorting Mini-HOWTO (和訳)をご覧ください。
Sorting Mini-HOWTO (和訳)からの引用
>>> def numeric_compare(x, y):
>>> return x - y
>>> a = [5, 2, 3, 1, 4]
>>> a.sort(numeric_compare)
>>> print a
[1, 2, 3, 4, 5]
prototype.jsでも関数オブジェクト渡しが、Ajax.Requestオブジェクトを作るときの引数指定で使われています。
読み込みの各段階(たとえばonComplete)で実行される関数を指定するところがそれです。















