長岡でScalaに入学した
9/28に新潟県長岡市でScala入学式に参加しました。 長岡IT開発者勉強会(#NDS33)の一環として開催されたハンズオン形式の勉強会です。 id:nkgt_chkonkさんが講師をしてくれました。
ScalaはおろかJavaすら普段いじってないレベルだったので不安でしたが、やってみるととてもおもしろかったです! 以下、簡単にレポートします。
ちなみに、資料はこちらにアップされています。
https://gist.github.com/Shinpeim/6740436
環境
Better JavaとしてのScala
写経したりしてScalaの動きを確認していきました。 お題となったのはドラクエ風RPGの戦闘。
PlayerからKnight、Magicianと継承させてみたり、 traitでWeaponを作ってLongSword object(static的なやつ)を作ったりしてました。
traitはRubyのmoduleみたいなやつで、ホント便利です。
trait Weapon trait KnightWeapon extends Weapon trait HasWeapon { protected var weapon: Weapon = NullWeapon } trait CanEquipKnightWeapon extends HasWeapon { def equip(w: KnightWeapon) = weapon = w } class Knight extends Player with CanEquipKnightWeapon
とかできる。 RubyいじったあとにJavaやろうとしてぐぬぬってなった記憶があったので、これがあると断然違います。 また、型をコンパイラがチェックしてくれるので、たとえばMagicianWeaponを装備しようとする怒られます。
型パラメータを使ってテンプレート的なやつを試したりもしました。
上記のCanEquipKnightWeapon
だとCanEquip[T <: Weapon]
みたいにできます。
scalaはいい感じに型で縛ってくれるので安心感ありますね。
モナド
Listの構造やmatchによる強力なパターンマッチ、再帰構造の利点など、手を動かして実際に確認していきました。 ここらへんからちょっとペースがきつくなっていきましたが、なんとかついていけました。 でも理解はふわっとした感じだったので、復習が必要ですね。
foreachとかmap、filterなどの高階関数はRubyで触ってたのですんなり理解出来ました。 Ruby使っているうちに、自然と関数型っぽい脳みそになっていたらしいです。
Optionモナドはすごくクールでした。 型で包み込んで忌まわしきnullチェックをコンパイラに任せられます。 Java8でも取り込まれるらしいので、ぜひ使いたい。
Futureモナドは遅延評価っぽいんだけどそうじゃないみたいでした。 このあたり理解が追いついてなくて、細かい部分でどう動作するのかってのがわかってないので復習したいです。
モナドって言葉が怖くてなかなかさわれなかったんですけど、今回はじめてやってみて、そんなに怖くないものだと理解できました。 モナディック!モナディック!
Twitter Bot
まとめとして、Twitter Botをみんなで作りました。 TLにぬるぽ見つけるとガッするやつ。
twitter4jを使ったのですが、gen-idea
ってやるとsbtがダウンロードまでしてくれてとっても楽でした。
最終的にはTLがガッで埋まったのが良い思い出。
LT
マインドストームのPID制御の話が熱かった! 制御系出身で、マインドストームやったりもしてたのでテンション上がりました。
あと東京勢の発表は最初から最後まで草を回避できませんでした。 草を回避できないダメ人間ですみません。
僕も発表したんですが、内容を校正して、タイミングを見てブログ記事にしようと思いますー。
まとめ
とても満足度高い一日でした。
Scalaは日ごろネットで情報を見てもメリットが良く分からなかったのですが、 入学式では丁寧に「こんなところがカッコいいよ!」と教えてもらえたので魅力がよく分かりました。
積極的に、適材適所で使えるようになりたいです。