Scala入門 その1 基本型とリテラル

2021年9月26日 engineering

こんにちは、 @kz_morita です。

Scala 入門したので、メモを残します。今回は、基本型とリテラルについて書きます。

手元の環境は、Scala 3.0.2 の REPL になります。

基本型とリテラル

Scalaの基本型は以下の通り

  • Byte: 8 bit 符号付き整数
  • Short 16 bit 符号付き整数
  • Int: 32 bit 符号付き整数
  • Long: 64 bit 符号付き整数
  • Char: 16 bit 符号なし Unicode 文字
  • String: Char のシーケンス
  • Float: 32 bit IEEE 754 単精度浮動小数点
    • 符号: 1 bit
    • 指数部: 8 bit
    • 仮数部: 23 bit
  • Double: 64 bit IEEE 764 倍精度浮動小数点
    • 符号: 1 bit
    • 指数部: 11 bit
    • 仮数部: 52 bit
  • Boolean: true or false

整数リテラル

整数リテラルは、基本的には Int 型になります。

scala> val x = 5
val x: Int = 5

Long 型にしたい場合は、末尾に L もしくは l をつけます。

scala> val x = 5L
val x: Long = 5

scala> val x = 5l
val x: Long = 5

Byte 型や、Short 型にする場合は、変数に型を明示するようにします。

scala> val x: Byte = 10
val x: Byte = 10

scala> val x: Short = 100
val x: Short = 100

Int 型で表現できない大きさの数値を入力しようとするとエラーになります。

scala> val x = 2147483648
-- Error:
1 |val x = 2147483648
  |        ^^^^^^^^^^
  |        number too large

# L をつければ大丈夫
scala> val x = 2147483648L
val x: Long = 2147483648

区切りに、_ が使用できます。

scala> val x = 1_000_000
val x: Int = 1000000

# _ はいくつでも大丈夫みたい
scala> val x = 1___000_000
val x: Int = 1000000

整数型の表現として、16進数もあります。(8進数や2進数などはなさそうです)

scala> val x = 0x100
val x: Int = 256

# Long も一緒
scala> val x = 0x100L
val x: Long = 256

浮動小数点リテラル

浮動小数点は、小数点や e などをつけると表せます。

scala> val x = 0.1234
val x: Double = 0.1234

scala> val x = 0.1234e2
val x: Double = 12.34

デフォルトでは、Double 型のようです。

2番目の 0.1234e2 表記は、0.1234 x 10 ^ 2 を表していて、指数部と仮数部を指定できる表記になります。

Float 型 (単精度) を表現するためには、F もしくは f を末尾につけます。

scala> val x = 0.1234f
val x: Float = 0.1234

scala> val x = 0.1234e2
val x: Float = 12.34

Double 型を明示的に指定したい場合は、末尾に、d もしくは D を指定すれば良い。

文字・文字列リテラル

文字を表すには ' で囲います。文字や unicode のコードポイントが使用できます。

scala> val x = 'A'
val x: Char = A

scala> val x = '\u0041'
val x: Char = A

特殊文字は他の言語と同様以下のような感じ。

scala> val x = '\n'
val x: Char = 


scala> val x = '\t'
val x: Char = 

エスケープも同様バックスラッシュで行う。

scala> val x = '\\'
val x: Char = \

文字列は、ダブルクォート " で囲う。

scala> val x = "Hello"
val x: String = Hello

ダブルクォート3つで """ ヒアドキュメント (raw string) が表せる。

scala> val x = """
     | Hello
     |    World
     | """
val x: String = "
Hello
   World
"

冒頭のスペースを無視するためには、先頭にパイプ ( | ) を入れ、stripMargin メソッドを呼ぶ

scala> val x = """|Hello
     |       |World
     | """.stripMargin
val x: String = "Hello
World
"

シンボルリテラル

任意の英数字を識別子として定義できます。

以前は、'hoge のような形でかけたみたいですが、Scala 3 では Error になるので、Symbol("hoge") といった形で書きます

scala> val = 'hoge

-- Error:
1 |val x = 'hoge
  |        ^
  |symbol literal 'hoge is no longer supported,
  |use a string literal "hoge" or an application Symbol("hoge") instead,
  |or enclose in braces '{hoge} if you want a quoted expression.
  |For now, you can also `import language.deprecated.symbolLiterals` to accept
  |the idiom, but this possibility might no longer be available in the future.

scala> val = Symbol("hoge")
val x: Symbol = Symbol(hoge)

まとめ

今回は、Scala の基本型とリテラルについてまとめました。 ほとんど他の言語と同じような内容ですが、例えば整数リテラルの 2 進数や 8 進数がないなど、多少の違いがありそうです。

こういった基礎的なところはコードを書いてくうちに慣れると思いますが、一度さらっと見ておくと後々楽になりそうです。

この記事をシェア