Scala データ型
Scala がサポートする主要なデータ型には、基本型、コレクション型、特殊型が含まれます。
次の表は、Scala がサポートするデータ型を示しています:
| 型カテゴリ | データ型 | 説明 | Scala標準ライブラリの実際のクラス |
|---|---|---|---|
| 基本型 | Byte | 8ビット符号付き整数、値の範囲は -128 から 127 | scala.Byte |
| 基本型 | Short | 16ビット符号付き整数、値の範囲は -32768 から 32767 | scala.Short |
| 基本型 | Int | 32ビット符号付き整数、値の範囲は -2147483648 から 2147483647 | scala.Int |
| 基本型 | Long | 64ビット符号付き整数、値の範囲は -9223372036854775808 から 9223372036854775807 | scala.Long |
| 基本型 | Float | 32ビットIEEE 754単精度浮動小数点数 | scala.Float |
| 基本型 | Double | 64ビットIEEE 754倍精度浮動小数点数 | scala.Double |
| 基本型 | Char | 16ビット符号なしUnicode文字、値の範囲は U+0000 から U+FFFF | scala.Char |
| 基本型 | String | 文字列型、文字のシーケンスを表す | java.lang.String |
| 基本型 | Boolean | ブール型、値はtrue 或 false | scala.Boolean |
| コレクション型 | List | 不変リンクリスト | scala.collection.immutable.List |
| コレクション型 | Set | 不変セット | scala.collection.immutable.Set |
| コレクション型 | Map | 不変キーと値のペアの集合 | scala.collection.immutable.Map |
| コレクション型 | Array | 可変配列 | scala.Array |
| コレクション型 | Tuple | 異なる型の要素を含むことができる不変コンテナ | scala.TupleN |
| コレクション型 | Option | 値を持つ可能性がある、または空であるコンテナを表す | scala.Option |
| コレクション型 | Either | 2つの可能な値型のいずれかを表す | scala.util.Either |
| コレクション型 | Try | 操作の結果が成功または失敗する可能性があることを処理するコンテナ | scala.util.Try |
| 特殊型 | Unit | 値がないことを表し、Javaの...に相当するvoid | scala.Unit |
| 特殊型 | Null | シングルトンオブジェクト、すべての参照型のnull値を表す | scala.Null |
| 特殊型 | Nothing | 戻り値のない型を表し、すべての型のサブタイプである | scala.Nothing |
| 特殊型 | Any | すべての型のスーパータイプ | scala.Any |
| 特殊型 | AnyRef | すべての参照型のスーパータイプ、Javaの...に相当するObject | scala.AnyRef |
Scala では、すべてのデータ型はオブジェクトです。
Scala には、Java のプリミティブ型(primitive types)のような概念はありません。Scala の基本データ型(Int、Double など)は構文上 Java のプリミティブ型に似ていますが、実際にはオブジェクトです。つまり、これらの型に対してメソッドを呼び出すことができます。
例えば、Int 型は Scala では実際には scala.Int クラスのインスタンスであり、scala.Int は AnyVal を継承した final クラスです。AnyVal は Scala の特別なクラスで、値型を表します。
以下は、さまざまなデータ型の使用例を示す完全な Scala プログラムです:
DataTypeExamples.scala ファイルコード:
object DataTypeExamples {
def main(args: Array[String]): Unit = {
// 基本型
val byteValue: Byte = 127
val shortValue: Short = 32767
val intValue: Int = 2147483647
val longValue: Long = 9223372036854775807L
val floatValue: Float = 3.14f
val doubleValue: Double = 3.141592653589793
val charValue: Char = 'A'
val stringValue: String = "Hello, Scala!"
val booleanValue: Boolean = true
// コレクション型
val listValue: List[Int] = List(1, 2, 3)
val setValue: Set[String] = Set("Scala", "Java", "Python")
val mapValue: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
val arrayValue: Array[Int] = Array(4, 5, 6)
val tupleValue: (Int, String, Boolean) = (42, "Answer", true)
val optionValue: Option[String] = Some("I am here")
val eitherValue: Either[String, Int] = Right(42)
val tryValue: Try[Int] = Try(10 / 2)
// 特殊型
val unitValue: Unit = ()
val nullValue: String = null
val nothingValue: Nothing = throw new RuntimeException("Nothing value")
// すべての値を出力
println(s"Byte Value: $byteValue")
println(s"Short Value: $shortValue")
println(s"Int Value: $intValue")
println(s"Long Value: $longValue")
println(s"Float Value: $floatValue")
println(s"Double Value: $doubleValue")
println(s"Char Value: $charValue")
println(s"String Value: $stringValue")
println(s"Boolean Value: $booleanValue")
println(s"List Value: $listValue")
println(s"Set Value: $setValue")
println(s"Map Value: $mapValue")
println(s"Array Value: ${arrayValue.mkString(", ")}")
println(s"Tuple Value: $tupleValue")
println(s"Option Value: $optionValue")
println(s"Either Value: $eitherValue")
println(s"Try Value: $tryValue")
println(s"Unit Value: $unitValue")
println(s"Null Value: $nullValue")
// nothingValue is not printed because it throws an exception
}
}
def main(args: Array[String]): Unit = {
// 基本型
val byteValue: Byte = 127
val shortValue: Short = 32767
val intValue: Int = 2147483647
val longValue: Long = 9223372036854775807L
val floatValue: Float = 3.14f
val doubleValue: Double = 3.141592653589793
val charValue: Char = 'A'
val stringValue: String = "Hello, Scala!"
val booleanValue: Boolean = true
// コレクション型
val listValue: List[Int] = List(1, 2, 3)
val setValue: Set[String] = Set("Scala", "Java", "Python")
val mapValue: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
val arrayValue: Array[Int] = Array(4, 5, 6)
val tupleValue: (Int, String, Boolean) = (42, "Answer", true)
val optionValue: Option[String] = Some("I am here")
val eitherValue: Either[String, Int] = Right(42)
val tryValue: Try[Int] = Try(10 / 2)
// 特殊型
val unitValue: Unit = ()
val nullValue: String = null
val nothingValue: Nothing = throw new RuntimeException("Nothing value")
// すべての値を出力
println(s"Byte Value: $byteValue")
println(s"Short Value: $shortValue")
println(s"Int Value: $intValue")
println(s"Long Value: $longValue")
println(s"Float Value: $floatValue")
println(s"Double Value: $doubleValue")
println(s"Char Value: $charValue")
println(s"String Value: $stringValue")
println(s"Boolean Value: $booleanValue")
println(s"List Value: $listValue")
println(s"Set Value: $setValue")
println(s"Map Value: $mapValue")
println(s"Array Value: ${arrayValue.mkString(", ")}")
println(s"Tuple Value: $tupleValue")
println(s"Option Value: $optionValue")
println(s"Either Value: $eitherValue")
println(s"Try Value: $tryValue")
println(s"Unit Value: $unitValue")
println(s"Null Value: $nullValue")
// nothingValue is not printed because it throws an exception
}
}
scalac コンパイラでコンパイルし、scala コマンドで実行します:
scalac DataTypeExamples.scala scala DataTypeExamples
出力結果:
Byte Value: 127 Short Value: 32767 Int Value: 2147483647 Long Value: 9223372036854775807 Float Value: 3.14 Double Value: 3.141592653589793 Char Value: A String Value: Hello, Scala! Boolean Value: true List Value: List(1, 2, 3) Set Value: Set(Scala, Java, Python) Map Value: Map(one -> 1, two -> 2, three -> 3) Array Value: 4, 5, 6 Tuple Value: (42,Answer,true) Option Value: Some(I am here) Either Value: Right(42) Try Value: Success(5) Unit Value: () Null Value: nullその他の拡張