Scala勉強会に行ってきた。

6月15日水曜日にScala勉強会第38回 in 渋谷に参加してきました。実はプライベートでは初めての勉強会でした。
 

1. Scala勉強会で学んだこと

勉強会ではFourSquareが公開したMongoDB用のScala DSLである、Rogueの使い方について、Scala Days 2011で使用されたスライドを見ながらご教示して頂きました。ScalaはHelloWorldレベルだったので、ほとんどちんぷんかんぷんでしたが、Scalaがどんなものか理解できた部分もありました。間違った理解をしているかもしれませんが…。  

1-1. Scalaは型を宣言しないのに型安全性が高い

Scalaは変数を宣言するときに型を書かなくていい(引数とか返り値の型もいらない!)らしいのですが、型安全かどうかはコンパイル時にチェックしてくれるようです。
例えば下のコードだと、Listの中身が全部数値であれば足し算が実行できますが、Listに文字列が含まれていると怒ります。 [code] scala> var sum = 0
sum: Int = 0
scala> List(1,2,3).foreach( sum += _)
scala> sum
res1: Int = 6
[/code]   [code] scala> var sum = 0
sum: Int = 0
scala> List(1,2,"3").foreach( sum += _)
:6: error: overloaded method value + with alternatives (Int)Int (Char)Int (Short)Int (Byte)Int cannot be applied to (Any) List(1,2,"3").foreach( sum += _)
[/code]  

1-2. PhantomTypeというインスタンスを持たない型を定義できる

例えば下のようなコード。Unselected と Selected は abstract なのでインスタンス化できません。また、sealed は同じファイル内のクラスからしか継承できないらしいです。いまいち意味がわかりませんが、要するにインスタンスを持つことのない型を定義できるようです。 [code] abstract sealed class Unselected
abstract sealed class Selected
[/code] で、これを型引数に使うらしいです。おそらく、ステートを実体を持たない型で表現して受け渡すんでしょうね。よくある、1=Unselected, 2=Selected みたいにステートをIntegerで表現してしまうと、適当に何か渡しても動いちゃいますからね。  

1-3. 結局 Rogue って何がすごいの?

というわけで Rogue は、MongoDB を TypeSafe に扱えるようになるのが売りらしいです。MongoDBはNoSQLでテーブル定義などを持たないのですが、RogueによってScala側にテーブル定義を作ることで、TypeSafeにしているみたいです。コンパイル時にSQLの正当性まで評価しているようだし、JavaでよくあるO/Rマッパーなんかより全然良さげな印象でした。  

2. 初めての勉強会でわかったこと

生涯初の勉強会参加だったわけですが、勉強会そのもの以外でも面白い気づきがあったので纏めてみます。  

2-1. 初心者でも大丈夫

僕はScalaについてはガチでHelloWorldレベルの初心者で、実際勉強会の内容も100%理解できていませんが、それでも得たものは非常に多かったと思っています。勉強会に参加するための勉強をしているくらいなら、勢いで参加しちゃった方が絶対いいです。  

2-2. 刺激を受ける

懇親会も参加してきたんですが、色んな人の話が聞けて結構面白かったです。特に今回はプログラム言語の勉強会だったので、普段の仕事でコードを書いてる人が多く、自分のようにコードを書かずに品質管理をやってる人はいないみたいでした。とはいえ仕事でScalaを使ってる人はまだまだ少数派でしたね。仕事で使わない新しい言語の勉強会に参加するプログラマの方々は、やはりみんな意識が高いので話を聞いてるだけでも刺激を受けました。  

2-3. でも、その刺激は長続きしない

勉強会が終わって、すぐにブログを書こうと思っていましたが、勉強会に行った日は終電だったのと、その翌日も仕事が慌しくて書けないでいるうちに週末になり…。となった時点でなんかもうブログ書かなくてもいいかな、、という感じになってきました。「ブログを書いて、次の勉強会の参加を表明するまでが勉強会」というのは正にそうで、勉強会に行ったそのままのテンションとモチベーションで復習・予習に取りかからないと持続していくのは難しいかもしれません。   というわけで勉強会楽しかったー。また行きたい!