第1回Scala勉強会大阪に行ってきました。
前置き
私自身は、以前はjava信者のエンジニアでしたが、
javaの発展が複雑化し過ぎていく傾向があるのにうんざりし、
java信者としては引退していました。
しかしScalaのような柔らかいスクリプトライクな構文なら、
アプリ作成のイマジネーションを損なうことなく、肩の力を抜いて開発できそうにも見えます。
この言語構文での開発スタイルなら、
javaの新技術というよりも、php/ruby/pythonなどのweb系スクリプトに対抗できるのでは?
と期待できそうな気がします。
(実行環境はJavaVMなので、webサーバーでの運用は従来通りだろうけど。。)
というわけで、Scalaについては、構文は面白そうだけど実用性はどうなんだろう?
という疑問を持ちながら行ってきました。
「スカラー入門」セッション
@asan_w エーさん。Cやjava系のオープンソース活動してるそうです。
実際にScalaを利用してプログラムを試してるそうで、
Scalaについての紹介と基本的な構文がメインの発表でした。
プレゼンをアップしてくれてた。
http://www.hcn.zaq.ne.jp/no-ji/memo-scala/ScalaIntroduction.pdf
Scalaのコンパイル
scalac(javacに相当する)でコンパイルすると普通のclassファイルになる
型推論など行うため、javacに比べればコンパイル速度は遅い。
(スクリプト言語のように軽快に開発するにはここが大事なので、質問してみました。)
Scalaの実行
普通のclassファイルなので、JavaVM上で実行される。
Androidのvm(Dalvik)でも動くらしい。
ただしこれによると、http://d.hatena.ne.jp/a-san/20111016
javaコマンドで実行するにはscala-library.jar がclasspathに必要らしい。
(ということは、scalaで作ったclassをjavaで利用するときもこのjarが必要なのかも?)
実行速度はjavaよりわずかに遅い程度なので、他の多くの言語に比べれば大変優秀。
Scalaとjavaとの互換性
javaのclassをそのままimportできるようです。
つまり、現在あふれてる膨大なjavaのライブラリを、scalaでもそのまま利用可能だそうです。
では逆に、scalaのclassをjavaで利用できるのか気になったので調べてみたところ、
ここにまとめてありました。
https://sites.google.com/site/scalajp/home/documentation/faq/java_interoperability
基本的に心配ないみたいですね。
Scalaの開発者(設計者)
スイス ローザンヌ工科大学(EPFL)のマーティン・オーダスキー教授。
JavaのGenerics設計者で、javacコマンドにも携わった方だそうです。
これを聞いて一気にscalacに安心感が持てました。
Scalaの開発環境
- Eclise plug-in
いまいちだったけど最近良くなってきたらしい。
- SBT
scalaのためのシンプルなビルドツール。@kitaro_naokiさんと@yalabさんのセッションでも出てきた。
- Ant
scalacタグで実行定義するだけ。@asan_wさんはこれ。
Scalaの言語構文
これがメインのセッションでした。具体的な文法例では、
- 変数宣言はvarとvalのみ。valは代入できないfinal変数(というか定数)。varは普通の代入可能な変数。
- 文字列は\マークエスケープではなく""でエスケープ。なので改行をそのまま改行で表現できる。
- switchに代わるmatch式がある。break文がなくなりました。
- forやwhileのループをかなり省略して記述できる。2重ループなんかも1行で記述できる。
しかし何故かbreakやcontinueがない。・・・これは欲しいよ。
- throwsを強制しない。
- リストやマップに、コーディングを楽にするメソッドがたくさん追加されてる。
- javaのinterfaceやabstractの代わりにトレイトがある。なんと多重継承できる。
などなど。
「FilterMonadic(フィルターモダリック)ってなんだ」セッション
@uskzさん。
Filter …withFilter
Monadic …monad モナドとは、"圏論"という数学の分野からきている。
そしてプログラムではなく、まさかの数式を使った圏論の話。http://twitpic.com/70ib60
みんなさっぱり分からないまま、会場は笑いの渦につつまれました。
「プログラミングの魔導書」という本を出しているそうです。
「Web Framework Lift」セッション
@mitsuhirow さん
Liftとは、
ScalaによるScalaのためのフレームワーク。
いろんなフレームワークのいいとこ取りを目指してるフレームワーク。
この勉強会に来た人のほとんどが知ってるフレームワークだそうです。
すいませんフレームワークには興味ないのでほとんど聞き流しました。
「Play framework」セッション
@kitaro_naoki
これもRailsみたいなフレームワークだそうで、聞き流しました。
しかしServletを使わずにホットリロードで開発でき、スケールアウトし易い設計だそうで、
少し魅かれる気がしました。
「AndroidをScalaで作る話」ライトニングトーク
@yalab よしだあつし
http://d.hatena.ne.jp/rudeboyjet/
minami.rb Ruby関西所属のフリープログラマー
前日、ScalaでのAndroidアプリ開発を試してみたそうです。
その内容:http://d.hatena.ne.jp/rudeboyjet/20111014
とりあえずはScalaでもAndroidアプリ開発も出来るらしい。
しかし突き詰めるとScalaでは出来ないことも出てくるらしく、
そういうときは問題のクラスをScalaでも利用できるようにjavaでラップクラス作るとかで
回避できるらしい。
これに限らず、
「Scalaで困ったらjavaで書けばいい」と思えば、
割と安心してScalaをお試し利用できそうな気がしました。