upinetree's memo

Web系技術の話題や日常について。

長岡で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は日ごろネットで情報を見てもメリットが良く分からなかったのですが、 入学式では丁寧に「こんなところがカッコいいよ!」と教えてもらえたので魅力がよく分かりました。

積極的に、適材適所で使えるようになりたいです。