なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

関数型Scalaの集いに行ってきました

connpass.com

感想

始めてドワンゴに行きました(会場はドワンゴ セミナールーム 歌舞伎座タワー 14F)。
以前最後に出席したScala関連の勉強会が、2012-07-21なので、3年ぶりぐらいにそれ関連の勉強会に行ったことになります。

nantonaku-shiawase.hatenablog.com

あのころはまだまだJavaについてさえ勉強不足で、趣味ではC++にハマっていく時代なので身についた感じはしませんが…
(※しかもエントリを読み返すと工数削減のことしか考えてない…染まってますなあ)

内容についての感想

ぶっちゃけ全然ついていけてなかったです。前の方の席座ってたのに恥ずかしい。
一応業務でもScalaを使ったアプリを直したりコンパイルしたりしてはいるのですが全然知識が足りなかった。

関数型Scalaの集いでわからなかった用語(あとで調べる)

・trait … これはわかる気がする
・Type Class(型クラス)
・Implicit
・Monoid
・Functor
Monad
・Free Monad

皆さん型クラスという言葉を普通に使っていて、その話題になるとImplicit+trait/Monoid/Functor/Monad/FreeMonadと言った話につながっていく気がしました。型クラスは何をするものぞ、というと異なる型に共通のインターフェイスを持たせて、統一的に扱えるようにするものらしいです。あ、これコップ本のimplicitの項で書いてあったことと似てるなと思ったら、それでは対応できないものに対処するためのテクニックらしいです。

たぶん私がなにか書くより、以下のgistを見るほうが良いと思いました
Scalaz勉強会 主要な型クラスの紹介 · GitHub

以下、型クラスの例(引用)

trait ToXml[A] {
  def apply(a: A): NodeSeq
}

case class Person(name: String, age: Int)
object Person {
  implicit val personToXml = new ToXml[Person] {
    def apply(a: Person): NodeSeq = 
      <person>
        <name>{a.name}</name>
        <age>{a.age.toString}</age>
      </person>
  }
}

case class Organization(name: String)
object Organization {
  implicit val orgToXml = new ToXml[Organization] {
    def apply(a: Organization): NodeSeq = 
      <organization>
        <name>{a.name}</name>
      </organization>
  }
}

何かやってることはC++のtemplateとかに近い気がしました。(→モナドとかファンクタとかの話になると全然見たこと無いパターンに入って行きましたが)
当分はこういった先人の資料を読んでいって知識を充足させないと駄目だなあと思いました。

Property Based Testing

あとは、この話が面白かった
@xuwei_kさんの、Property Based Testing - scalapropsとscalacheckとその他色々

話の概要
・scalacheckというライブラリはテストコードを書くとテストケースをたくさん試してくれる「事前に関数を定義しておけば、任意の型の値が生成可能」とか
・でも既存のscalacheckが微妙(→並列性重視しているためコード汚い&無駄なクラス階層あり)なので、改良
・データサイズがでかすぎて処理が重すぎて死んだり、データのばらつきが十分ではない場合があるのでそのへんを謎技術で調整

実際触ってないのだが、リクエストされた任意のURLをパースする処理があったとして、そのテストデータを半自動で作ってくれたりしたら楽だなあと思いました。

カレー

すぐ近くのナイルレストランでカレーを食べて帰りました。美味しかったです。
ナイルレストランのホームページにようこそ!