基本の型について解説

Scala 3 (Dotty 0.26.0-RC1) 2.13.3 2.12.12
最終更新:2020年8月16日

[AD] scalapediaでは記事作成ボランティアを募集しています

この記事ではScalaで予め用意されている「基本の型」について解説します。

Scalaで利用できる基本の型について

Scalaでは他のプログラミング言語と同様に数値や文字など基本的な値を扱う仕組みが用意されています。
この記事ではScalaで予め用意されている数値や文字の型を「基本の型」と呼びます。
用意されている「基本の型」は以下のとおりです。

範囲
Byte-128 から 127
Short-32768 から 32767
Int-2147483648 から 2147483647
Long-9223372036854775808 から 9223372036854775807
Float32ビットのIEEE 754単精度浮動小数点
Double64ビットのIEEE 754倍精度浮動小数点
Char16ビット符号なしUnicode文字
Booleantrue または false
StringCharのシーケンス

Scalaの基本の型はすべてオブジェクトである

先ほど説明した基本の型はすべてオブジェクトです。

basic types

「基本の型」は上の図のように定義されています。
Anyクラスはすべてのクラスの親クラスです。
Anyクラスの直接の子供には値型(AnyValクラス)と参照型(AnyRefクラス)の2つのクラスがあります。
Int等の数値型およびChar,BooleanAnyValの子供です。

また、UnitAnyValの子供です。
Unitは値として意味がないことを示す型です。

StringAnyRefの子供です。

値型はキャストして型の違う変数に代入できる

値型は以下のように矢印の向きにキャストすることができます。
例えばIntからLongへキャストすることができますが、その逆向きに(LongからInt)にキャストすることはできません。

Byte ---> Short ---> Int ---> Long ---> Float ---> Double Char --->

以下のようにInt型の変数「i」の値でLong型の変数「l」を初期化することができます。

val i: Int = 123 val l: Long = i

以下のように'Long型の変数「l」の値でInt型の変数「i」を初期化することはできません。
コンパイルエラーになります。

val l: Long = 123 val i: Int = l
  • コンパイル時に出力されるエラーメッセージ
    type mismatch; [error] found : Long [error] required: Int [error] val i: Int = l

Javaの型との対比

ScalaにはJavaのプリミティブ型に該当するものはありません。
以下のように基本の型がJavaのプリミティブ型およびそれらのラッパークラスに該当します。

Scala 基本の型Java プリミティブ型Java ラッパークラス
BytebyteByte
ShortshortShort
IntintInteger
LonglongLong
FloatfloatFloat
DoubledoubleDouble
CharcharCharacter
BooleanbooleanBoolean

Java言語との相互呼び出し

Scalaの基本の型とJavaのプリミティブ型やそのラッパークラスは相互に変換可能です。
したがって、ScalaからJavaのメソッドを呼び出す際に特に変換処理を実装する必要はありません。
JavaからScalaを呼び出す際にも同様に変換処理は不要です。

以下の例ではScalaからJava、JavaからScalaのAPIを呼び出しています。

  • ScalaからJavaを呼び出す例
java
static public int squaredJava(int i) { return i * i; }
val i: Int = 2 val result = squaredJava(i) println(result)
  • JavaからScalaを呼び出す例
def squaredScala(i: Int): Int = i * i
java
int i = 2; int result = squaredScala(i); System.out.println(result);

実行結果はどちらも以下のようになります。

4

サイト内検索