今日はScala勉強会があったのでScala2.8のScalaDocを何気に見ていた。
見ていてふと思った。
Scalaはカオスだとよく言われる。
確かに私も数年前にScalaを使い出した時には「訳わかんないな〜 このクラスどうやって使うんだ〜」と感じるクラスが沢山あった。
ScalaとJavaのライブラリの使い分けもよく分からなかった。
ただ何年か使っているとScalaはカオスだと感じなくなっていた。
確かに今でも「へ〜こんなことができるんだ」ということはたまにあるが、だいたいこんな感じでやるよな〜
とか 多分こんなクラスがあるんじゃないか? やっぱり あった〜
という勘所がわかってきた。
しかし しかし である。
最近「ビューティフルアーキテクチャ」という本を読んだが、これが結構面白かった。
「ビューティフルコード」の続編らしいが様々なプロジェクトを取りあげているし、普段あまり聞けない設計思想について書かれているので、設計思想とかが好きな人には読み応えのある本だと思う。
私が一番興味をもって読んだのはEiffelの作者の関数プログラミングの評価である。
クロージャ、コンビネーター、モナド、参照透明性など オブジェクト指向...いやいやEiffelと比べて評価しているので面白い。
結局メイヤーさんは関数型を評価しながらもオブジェクト指向の方がいい と言っているが果たしてどうか?
個人的には関数型とオブジェクト指向はLispとSmalltalkの関係のような気がしている。
Scalaでプログラムを組むようになって3年経つが最近Scalaの功績の中では「object」キーワードの働きが大きいのではないかと考えるようになった。
objectキーワードはSingltonやjavaのstaticの代用などいくつかの側面があるが、私が多用しているのはモジュールとしての「object」の使用である。
つまりシステムのアーキテクチャとしてのモジュール構造をobjectを使って実現している。ただ、それだけのことであるが、これが実に見通しをよくする。
最近少し時間が出来たので要件定義用のツールをまた開発している。
Webベースのクラサバ構成とし、不要なデータ交換を極力避けるためにオブジェクトテクノロジーで通せるアーキテクチャとして以下の構成にした。
クライアント
Flex
サーバー
DB:NeoDatis オブジェクト指向のDB
言語:Scala
通信:BlazeDS Flexとサーバーサイドの通信手段
コンテナ:Jetty HttpServer
クライアントはJavaFXが使えればJavaVMで固められるので、可能性を少し探ったが大きな障害が2つあった。
ビジュアルな図をプログラムと統合するツールが無い、イラストレーターやフォトショップからの変換ツールはあるが、どちらのツールも使い慣れていないので使えない。
羽生田さんから「Scalaスケーラブルプログラミング」を献本していただいた。
まだ発売前の本を手にするのは嬉しいものだ。
http://www.amazon.co.jp/o/ASIN/4844327453
この本の原著は2年ほど前からPDFとして売られたものの翻訳版である。
もちろんPDF版は何度も改訂され最新版として本になった。
http://www.artima.com/shop/programming_in_scala
この翻訳本もScala2.7.2をベースに動作確認しているそうなので最新の内容をカバーしている。
原著は「Programin in Scala」というものでとても読みやすいものだった。
同じくこの翻訳本も読みやすい。