コップ本をやる 第5章 基本型と演算子

最近Scalaを使うようにしていますが、なんだかうまく使いこなせていない感があります。それはScalaをしっかり理解していないことから来る不安感なので、飛ばし飛ばし読んだコップ本を再度すみからすみまで読み直してしっかり理解しようと考えています。そこで、毎日コップ本を少しずつ進めていこうと思います。このブログには勉強したことを自分用にメモした内容を書いていきます。

第5章 基本型と演算子

基本型

Scalaの基本型はJavaと同じです。intやlongなど互換性のためJavaと同じ型が使えますが、Int、LongとScala用の型を使う方が良いです。それぞれscala.Int、scala.Long型が完全名です。String型だけはJavaでもクラスなのでJavaと同じjava.lang.Stringです。

scalaパッケージとjava.langパッケージは自動的にimportされるのでそれぞれimportの必要はありません。

リテラル

Javaと同じです。

// 16進数
val hex = 0x5
val hex2 = 0x00FF

// 8進数
val oct = 035

// Long
val a = 35L
val b = 35l

ShortとByteは型を指定した上で範囲内の整数値を指定します。
範囲外を指定するとエラーになります。

scala> val a: Short = 32767
a: Short = 32767

scala> val a: Short = 32768
:10: error: type mismatch;
found : Int(32768)
required: Short
val a: Short = 32768

浮動小数点もJavaと同じです。

//小数点を付けるとDouble
scala> val a = 10.0
a: Double = 10.0

// dを付けるとDouble
scala> val a = 10d
a: Double = 10.0

// fを付けるとFloat
scala> val a = 10f
a: Float = 10.0

文字、文字列もJavaと同じです。
scala> val a = ‘b’
a: Char = b

scala> val a = “hoge”
a: String = hoge

Scalaではより便利な文字列リテラルが使えます。
println(“””|hogehoge
|fugafuga”””)
hogehoge
fugafuga

|を先頭に入れることでインデントを入れてもインデントは無視されるようになります。

この章には無いですが、s”i=$i”と文字列リテラルの頭にsを付けることで加工文字列リテラルとする事ができます。(これは便利!)

演算子はメソッド

Scalaの演算子はすべてメソッドです。
1 + 2としても、内部ではInt型1が持つメソッド+に、パラメータとして2を指定して実行するという意味になります。省略せずに書くと1.+(2)ですね。この記法は中置記法と呼び、パラメータを一つ取るメソッドはすべて中置記法が使えます。

// “hoge”.indexOf(‘g’)も次のように中置記法が使えます。
scala> “hoge” indexOf ‘g’
res6: Int = 2

前置演算子

Scalaでは、-10も10にunary_-と言う名前のメソッドを実行すると言う意味になります。前置演算子として定義できるのは-,+,!,~の4つだけです。

後置演算子

引数を取らないメソッドは空括弧を省略でき、またドットを省略することもできます。ドットを省略した場合後置演算子となります。

scala> “HOGE” toLowerCase
res8: String = hoge

Scalaの慣習では副作用を持つメソッドの実行は空括弧を記述し、副作用を持たないメソッドの実行は空括弧を省略します。

オブジェクトの等価性

Javaでは==は同じインスタンスかどうかをチェックしますが、Scalaの==はequals呼び出しとなり、等価性をチェックします。
Javaの==のような同じインスタンスかどうかをScalaでチェックしたい場合は、eqメソッドを使います。

scala> “hoge” eq “hoge”
res18: Boolean = true

scala> “hoge” eq new String(“hoge”)
res17: Boolean = false

No Comments

Post a Comment

コメントを投稿するには、下の計算の答えを入力する必要があります。答えは半角数字で入力してください。 *