$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

Scala入門してる - 演算子編

コップ本読みながら、Scala入門してる。今は第05章の基本型と演算子を読んでる。

Scala演算子はすべてメソッド呼び出しらしい。分かりやすくて良い。

例えば

val x = 1 + 1

val x = (1).+(2)

と同じらしい。分かりやすい。


単項演算子みたいなのもあると思うのですが、これはunary_hogeみたいなのにマッピングされるみたい。つまり

val x = -1

val x = (1).unary_-()

と同一って感じっぽい。分かりやすい。


ちなみにすべてのメソッドは中置演算子のようにできるみたい。例えばStringのindexOfは単なるメソッドだけど、中置演算子として書ける。

val s = "Hello, world!"
s indexOf 'o'

これを利用することで、for文で使ってたtoがなぜああいうふうに使えるか分かる。

for (i <- 1 to 10) {
  println(i)
}

これは

for (i <- (1).to(10)) {
  println(i)
}

となって、単にtoメソッドが呼ばれているだけみたい。なるほど。


toの実装を見るために、実際にscalaのコードを見に行ってみる。https://github.com/scala/scala

まずIntはどのへんにあるかなと思ったら、https://github.com/scala/scala/blob/2.11.x/src/library/scala/Int.scala にあった。これはabstract classっぽいので、実際の実装はあんまりなかった。たぶんJavaのソースに実装がありそう?

ここにはunary_~とかunary_-とかが書いてあったので、これが前置演算子になるんだなーと分かった。https://github.com/scala/scala/blob/2.11.x/src/library/scala/Int.scala#L39..L43

さらにgit grep 'def to('とかして探してみると、src/library/scala/runtime/RichInt.scalaというファイルが見つかった。ここにtoの定義を発見。https://github.com/scala/scala/blob/2.11.x/src/library/scala/runtime/RichInt.scala#L71..L71 。Range.Inclusiveというのが返るみたい。どうやってRichIntとかが呼ばれるのかよくわからないのだけど、聞いてみるとimplicit conversionみたいな仕組みが使われるみたい。よくわからんけど、もっと読んでったら分かりそう。

会話もした。



まとめ

今回はScala演算子の使われ方についてちょっとだけ調べた。全部メソッドなのは分かりやすくていい。ちょっとずつScala勉強してるけど、PerlRubyの中間っぽい感じに見えてかわいい。

前回のエントリー

blog.shibayu36.org

「ドロヘドロ」読んでいる

最近漫画でドロヘドロにハマって読んでいた。

まずストーリーに引きつけられる。魔法使いとそうではない人の対比がある世界観が独特で面白い。また伏線がいろいろ張り巡らされていて、一度読んだ後二度目を読んでみると、はじめから伏線が書かれていることに気づく。

キャラクターもそれぞれ個性があり、いろんな立場のキャラクターが居るのだけど、なんとなく全員が憎めない感じで良い。個人的には少し天然な恵比寿とかっこいい能井が好き。

とにかく面白いのだけど、月刊IKKIが今休刊してるっぽくて、後ちょっとで終わりそうなのに最終巻が出てないっぽくて非常に気になっている。今年中に再開するっぽいので、はやく続きが見たい。なんとかしてくれ。

「むかし僕が死んだ家」読んだ

東野圭吾作の「むかし僕が死んだ家」を読んだ。

300ページくらいあったけど、とにかくどんどん伏線が回収されていくのを見て一気に読み終えてしまった。むかし僕が死んだ家というタイトルが結局どういう意味だったのか気になる。普通に主人公と家が関係有るのかと思いながら読んでいたのでミスリードに使われたのかどうなのか。気になったのでいくつか調べて考察読んでみたけど、よく分からなかった。

東野圭吾の作品、昔から非常によく読んでいた。個人的には「秘密」が非常に好きで、秘密を読み終えた後にその文章からその時の二人の心情をイメージしてしまって悶絶したりしてた。東野圭吾けっこう好きだけど、電子書籍に反対しているのか、著作がKindle化されないのだけが残念である。