[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事ではScalaで予め用意されている「基本の型」について解説します。
Scalaで利用できる基本の型について
Scalaでは他のプログラミング言語と同様に数値や文字など基本的な値を扱う仕組みが用意されています。
この記事ではScalaで予め用意されている数値や文字の型を「基本の型」と呼びます。
用意されている「基本の型」は以下のとおりです。
型 | 範囲 |
---|---|
Byte | -128 から 127 |
Short | -32768 から 32767 |
Int | -2147483648 から 2147483647 |
Long | -9223372036854775808 から 9223372036854775807 |
Float | 32ビットのIEEE 754単精度浮動小数点 |
Double | 64ビットのIEEE 754倍精度浮動小数点 |
Char | 16ビット符号なしUnicode文字 |
Boolean | true または false |
String | Charのシーケンス |
Scalaの基本の型はすべてオブジェクトである
先ほど説明した基本の型はすべてオブジェクトです。
「基本の型」は上の図のように定義されています。
Any
クラスはすべてのクラスの親クラスです。
Any
クラスの直接の子供には値型(AnyVal
クラス)と参照型(AnyRef
クラス)の2つのクラスがあります。
Int
等の数値型およびChar
,Boolean
はAnyVal
の子供です。
また、Unit
もAnyVal
の子供です。
Unit
は値として意味がないことを示す型です。
String
はAnyRef
の子供です。
値型はキャストして型の違う変数に代入できる
値型は以下のように矢印の向きにキャストすることができます。
例えば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 ラッパークラス |
---|---|---|
Byte | byte | Byte |
Short | short | Short |
Int | int | Integer |
Long | long | Long |
Float | float | Float |
Double | double | Double |
Char | char | Character |
Boolean | boolean | Boolean |
Java言語との相互呼び出し
Scalaの基本の型とJavaのプリミティブ型やそのラッパークラスは相互に変換可能です。
したがって、ScalaからJavaのメソッドを呼び出す際に特に変換処理を実装する必要はありません。
JavaからScalaを呼び出す際にも同様に変換処理は不要です。
以下の例ではScalaからJava、JavaからScalaのAPIを呼び出しています。
- ScalaからJavaを呼び出す例
javastatic 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
javaint i = 2; int result = squaredScala(i); System.out.println(result);
実行結果はどちらも以下のようになります。
4