Scala
変数
var variableVal = 1
var intVar: Int = 1 //型指定変数
定数
val constVal = 1
val intVal: Int = 1 //型指定定数
コレクション
代表的な型
- Seq
- Set
- Map
Seq
順番を保持する
val seq = Seq(1, 2, 3)
Seqの1種であるList
val list = List(1, 2, 3)
val list = 1 :: 2 :: 3 ::Nil //"::"で結合
val list2 = list :+ 4 //末尾に追加
val list3 = list ++ list2 //listの結合
Listの操作
val list = List(1, 2, 3, 4, 5)
list.head //先頭要素を返す
list.tail //先頭要素を除いた残りの要素を返す
list.isEmpty //空かどうか
list.contains(1) //1を含むか
list.reverse //逆転
list.distinct //ユニークな要素を抽出
list.groupBy(x => x % 2) =>Map((1, List(1, 3, 5))(0, List(2, 4))) //偶数と奇数にわける
list.sum //リストの合計
list.reduceLeft((x, y) => x + y) //左から順に加算
list.map(_ * 2) //リストを2倍したリストを作成(ワイルドカード使用可能)
list.mkString(",") //リストの中身を","で区切った文字列を作成
list.count(_ < 3) //3より小さいものをカウント
list.sortWith((s, t) => s < t) //小さい順にソート
Set
重複を許さない
val numbers = Set(1, 2, 3)
Map
キーと値がセット
val map = Map(1 -> "red", 2 -> "blue", 3 -> "yellow")
val red = map(1) =>red
条件分岐
if文
if (条件) {
処理1
} else if (条件) {
処理2
} else {
処理3
}
//式にすることもできる
val result = if (条件) {
処理1
} else if (条件) {
処理2
} else {
処理3
}
case文
javaなどと違い、breakを書かなくてもcaseに入ればストップする
変数 match {
case 条件 =>
処理1
case _ =>
処理2
}
//式にすることもできる
val result = 変数 match {
case 条件 =>
処理1
case _ =>
処理2
}
ループ処理
for文
10回繰り返す
for (i <- 0 to 10(リスト)){
処理
}
//ネストしたfor文(九九の結果を表示)
for (i <- 1 to 9; j <- 1 to 9){
println(i * j)
}
//for文に条件を指定(偶数の時のみ表示)
for (i <- 1 to 9; j <- 1 to 9 if i % 2 == 0 || j % 2 == 0){
println(i * j)
}
//for文でlistを返す
val list = for (i <- 1 to 9; j <- 1 to 9){
yield i * j //yieldを使用することで値を返すことができる
}
while文
10回繰り返す
var i = 0
while(i < 10){
処理
}
foreach文
val list = List(1, 2, 3, 4)
list.foreach{ e =>
処理
}
メソッド定義
戻り値の型は省略可能(場合によっては"{}"と"()"も)
def メソッド名(引数) : 戻り値の型 = {
処理
}
//省略例
def sum(i, i2) = i + i2
クラス定義
・クラスの後ろがコンストラクタ引数
・getter、setterは自動的に定義される(引数がvalで定義されていた場合はgetterのみ、privateならどちらも作成されない)
class Car(val carName){
def displayName = carName
}
val car = new Car("car")
println(car.displayName)
Option
Option型で定義した変数にnullが入った場合、Noneを返し、それ以外はSomeを返す
Nullが入っていてもNullPointerExceptionで落ちない
val none = null
val optNone: Option[String] = Option(none)
optNone match{
case Some(h) => h
case None => 0
}
タプル
複数の値をまとまりとして表す
def sample(a: Int, b: Int) = {
val sum = a + b
val sub = a - b
(sum, sub)
}
val tuple = sample(10, 20)
println(tuple._1) =>30
println(tuple._2) =>-10