$shibayu36->blog;

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

Scala入門してる - クラスとオブジェクト編

コップ本第04章を読んだ感想を少しだけ。

class

クラス定義はclassというキーワードを使う。これで定義するのはインスタンスを生成するもの。ScalaではJavaのようなstaticなメソッドはclassでは定義できない。

varでpublicなメンバー、defでメソッドを定義。privateで隠蔽。

class Hoge {
  var a = 0
  private var b = 0
  def getB(): Unit = { return b }
}

object

ではstaticなメソッドを作るにはどうするかというとobjectを使う。定義されたclassと同じ名前のobjectは同じファイルに記述する必要がある。なんの意味もないobject指定だけど、こういう感じ。

object Hoge {
  def piyo(): Unit = { println("piyo") }
}

まとめ

とりあえず、インスタンスを作りたいときはclass、いわゆるクラスメソッドを作りたかったらobjectと覚える。

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が今休刊してるっぽくて、後ちょっとで終わりそうなのに最終巻が出てないっぽくて非常に気になっている。今年中に再開するっぽいので、はやく続きが見たい。なんとかしてくれ。