Scalaのpimp my libraryを試す
参考文献
pimp my libraryとは
- ScalaのImplicit conversion (暗黙の型変換) の機能の中のひとつ
- 既存のクラスにメソッドを追加して簡単に拡張できる
- 例えばこんな具合
implicit class RichString(val src: String) { def smile: String = src + ":-)" def wink: String = src + ";)" }
やってみる
sbtコンソール上でメソッドを定義して試す。
scala> implicit class RichString(val src: String) { | def smile: String = src + ":-)" | def wink: String = src + ";)" | } defined class RichString scala> "Hello! ".smile res0: String = Hello! :-) scala> "".wink res1: String = ;)
所感
良さそうなところ
- めんどくさいこと考えずに既存クラスに機能追加できる
良くなさそうなところ
- 使い方によってはコードの保守性が低くなりそう
- 例えばこんなこともできちゃう
implicit class Bug(val src: String) { def one: Int = 1 }
実行するとこんなかんじ。
scala> implicit class Bug(val src: String) { | def one: Int = 1 | } defined class Bug scala> "hogehoge".one res2: Int = 1 scala> "two".one res3: Int = 1
String
のメソッドを叩いたらInt
型が返ってきちゃう。
今後のこと
DwangoさんのScala研修テキストや本でScala学習をしてきたけど、そろそろなんか作ってみたい。ものを作っていて引っかかったところは調べるってやり方だと体系的に学びにくいので、「説明書を読んでからやる」っていうやり方は必要だと思いつつ、やっぱり退屈ではある。