Scala データ型

Scala がサポートする主要なデータ型には、基本型、コレクション型、特殊型が含まれます。

次の表は、Scala がサポートするデータ型を示しています:

型カテゴリデータ型説明Scala標準ライブラリの実際のクラス
基本型Byte8ビット符号付き整数、値の範囲は -128 から 127scala.Byte
基本型Short16ビット符号付き整数、値の範囲は -32768 から 32767scala.Short
基本型Int32ビット符号付き整数、値の範囲は -2147483648 から 2147483647scala.Int
基本型Long64ビット符号付き整数、値の範囲は -9223372036854775808 から 9223372036854775807scala.Long
基本型Float32ビットIEEE 754単精度浮動小数点数scala.Float
基本型Double64ビットIEEE 754倍精度浮動小数点数scala.Double
基本型Char16ビット符号なしUnicode文字、値の範囲は U+0000 から U+FFFFscala.Char
基本型String文字列型、文字のシーケンスを表すjava.lang.String
基本型Booleanブール型、値はtrue 或 falsescala.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
コレクション型Either2つの可能な値型のいずれかを表すscala.util.Either
コレクション型Try操作の結果が成功または失敗する可能性があることを処理するコンテナscala.util.Try
特殊型Unit値がないことを表し、Javaの...に相当するvoidscala.Unit
特殊型Nullシングルトンオブジェクト、すべての参照型のnull値を表すscala.Null
特殊型Nothing戻り値のない型を表し、すべての型のサブタイプであるscala.Nothing
特殊型Anyすべての型のスーパータイプscala.Any
特殊型AnyRefすべての参照型のスーパータイプ、Javaの...に相当するObjectscala.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
  }
}

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
その他の拡張