Document

Scala 基本構文編
目次
•
•
•
•
•
Scala 概要
基本データ型
変数、定数
配列
(おまけ)Java8のラムダ式とScalaの関数リ
テラル
Scala 概要
JavaVM上で動作する、比較的新しいプログラミン
グ言語。
Javaの1/2程度のコード量かつ、同等の実行速度を
もち、Javaとの相互呼び出しが可能。
また、標準ライブラリでマルチコアに対応した並列
処理プログラムを作成することができる。
基本データ型
型名
Byte
Short
Int
Long
Char
String
Float
Double
Boolean
説明
8ビット符号付き整数
8ビット符号付き整数
32ビット符号付き整数
64ビット符号付き整数
16ビット符号なしUnicode文字
Charシーケンス
32ビットIEEE754単精度浮動小数点数
64ビットIEEE754単精度浮動小数点数
trueかfalse
デフォルト値
0
0
0
0
'\0'
null
0
0
FALSE
基本的にはJavaと似ています。
String型を除いてJavaではプリミティブ型として存在する型
ですが、Scalaにおいてはすべてオブジェクト型となります。
変数、定数(1)
変数の定義です。
var num:Int = 100
Int型の変数numを定義し、初期値として100を設定しています。
Scalaには型推論があるため、型は省略することも可能です。
また、複数の変数を同時に初期化することも可能です。
var str1,str2,str3 = "abcdef"
上記例では、str1、str2、str3をすべて文字列“abcdef”で初期
化します。
型は、型推論により、String型となります。
変数、定数(2)
定数の定義です。
val firstposition = 1
型は型推論によりInt型になります。
定数としてvalで宣言したので、初期化後にfirstpositionに値を代
入することはできません(コンパイルエラーになります)。
配列(1)
配列の定義です。
val array1 = new Array[String](10)
Scalaでは配列はArrayクラスで宣言します。
疑問:
なぜ要素数が[]ではなく、()で記述されるのでしょうか。
ヒント:
C言語、Java等での[]は、配列用の文法です。
一方、Scalaでは配列はArrayクラスです。
配列(2)
解:
配列へのアクセスは、Arrayクラスのメソッド呼び出しであ
るから、です。
例えば、先の例の配列にたいして array1(0)を参照す
る場合は内部的には array1.apply(0) と書かれてい
るのと同じ動作を行います。
同様に、値を代入する場合には update というメ
ソッドが呼びだれているわけです。
おまけ:Java8のラムダ式とScalaの関数リテラル(1)
Java8でラムダ式が導入されました。
(String s1) -> {
return "(" + s1 + ")";
}
文字列の前後に括弧をつけるだけのラムダ式です。
Javaでは7から型推論も導入されたので、型の省略も可
能です。
さらに、一行で終わる場合は{}を省略でき、引数が1つ
なら括弧も省略可能。
return文も省略できたりするので・・・
おまけ:Java8のラムダ式とScalaの関数リテラル(2)
こんな感じになりました。
s1 -> "(" + s1 + " )"
ちなみにScalaの関数リテラルで書くと、こうなります。
s1 => "(" + s1 + ")"
もはやほとんど一緒です。文法的には矢印しかかわりません。
実際に試してはいませんが、メソッドを引数として受け取る高階
関数も、よく似たつくりになっているようです。
ScalaがJavaの後継といわれてましたが、JavaがScala化しはじ
めている・・・?