前章:基本

Scalaの型階層
Anyは全ての型のスーパータイプであり、トップタイプとも呼ばれるequalsやhasCode、toStringなどの特定のユニバーサルメソッドが定義されているAnyにはAnyValとAnyRefの2つのサブクラスがある
AnyValは値型を表し、定義済みの値型は9個ある。それぞれの型はnullを許容しないDoubleFloatLongIntShortByteCharUnitBoolean
AnyRefは参照型を表し、値型以外の全ての型は参照型として定義される- ユーザー定義型は
AnyRefのサブタイプ。また、ScalaがJVM上で実行される場合、AnyRefがjava.lang.Objectに対応する
- ユーザー定義型は
Tip
Scala.jsやScala Nativeでは
java.lang.Objectが存在しないため、上記のような表現になっている
Anyはスーパータイプなので、List[Any]型には全ての要素を追加できる
val list: List[Any] = List(
"a string",
732, // an integer
'c', // a character
true, // a boolean value
() => "an anonymous function returning a string"
)
list.foreach(element => println(element))
// a string
// 732
// c
// true
// <function>タイプキャスト
- 値型は、以下の方向でキャストできる

- Scalaの新しいバージョンでは精度の問題から
LongからFloatへの型変換は非推奨になっている
val x: Long = 987654321
println(x)
val y: Float = x.toFloat
println(y) // 9.8765434E8 (note that some precision is lost in this case)
val face: Char = '☺'
val number: Int = face
println(number) // 9786- 型変換は一方向で、下記はコンパイルできない
val x: Long = 987654321
val y: Float = x.toFloat
val z: Long = y // Required: LongNothing and Null
Notihingは全ての型のサブタイプであり、ボトムタイプとも呼ばれる- 型を持つ値は存在せず、一般的な用途としては、例外の発生やプログラムの終了、無限ループが終わらない場合などを通知する場合が挙げられる
Nullは全ての参照型のサブタイプ- Nullはnullと言う単一を持つ
Nullは主に他のJVM言語との相互運用性のために提供されているので、Scalaではほとんど使用するべできはない
次章:クラス