特徴的なクラス

1. Tuple(タプル)

Scalaでは、ある値を組み合わせたひとつの事をTuple(タプル)と呼びます。 こんな感じです。

val a = (1,"test")
// a : (Int, String)

上記例では、 Int型と文字列型の組み合わせが宣言されています。以下のように各要素にアクセス可能です。

println(a._1)
// 1
println(a._2)
// test

最大22個の要素まで宣言できます。

val b = ("01","02","03","04"
    ,"01","02","03","04"
    ,"01","02","03","04"
    ,"01","02","03","04"
    ,"01","02","03","04"
    ,"01","02"
   )

2. Unit

Javaで言うところの”void”的なものです。”戻り値が無いメソッド”の型として定義されます。 標準出力に文字列を出力するだけで、”戻り値”はありません。

def noRet:Unit = {
  println("Hello World")
}

実は、Unitは”要素が無い”Tupleと同一です。

def noElement = ( )
//  要素が無い(0個の要素のTuple)は、"Unit"と同一。

3.Option / Some / None

Option は値が”存在するか”、”存在しないか”を表現できるクラスです。 値が存在する場合: Some[x] 値が存在しない場合: None SomeとNoneはOption の子クラスです。いずれか( Some or None )が設定されています。

// Map は "キー"と"値"のペア情報です。
val empMap = Map(1 -> "太郎", 2 -> "次郎")
val emp1 = empMap.get(1)
// emp1 : Option[String] = Some(太郎)
val emp2 = empMap.get(2)
//  emp2 : Option[String] = Some(次郎)
val emp3 = empMap.get(3)
//  emp3 : Option[String] = None
//  キー:3 に対応する値が無いため "None"が設定される。

このようにOption 型と言う親クラスを介する事で、 Some か Noneの判定をしてから処理することでNullPointerExceptionの発生を食い止める事が出来ます。

for(i <- 1 to 5) {
 empMap.get(i) match {
  case Some(v) => println(i + ":" + v)
  case None => println(i + ":(空き番)" )
 }
}

// 1:太郎
// 2:次郎
// 3:(空き番)
// 4:(空き番)
// 5:(空き番)

match { case *** } は パターンマッチと呼ばれるものです。SomeかNoneの型の場合に、それぞれ “=>” 以降の処理を実行します。 また、以下のように要素を取り出してから(emp3の型はOption)、値がNoneの場合にデフォルト値を設定してメソッドを呼べます。 以下では、emp3がNoneの場合には、”(空き番)”を出力します。 このように処理することで、実行時のNullPointerExceptionを避ける事ができます。 そのため、Option型から値を取り出すときはgetOrElseを使うことが強く推奨されています。

val emp3 = empMap.get(3)
println(emp3.getOrElse("(空き番)"))
// (空き番)

このようにOption 型と言う親クラスを介する事で、 Some か Noneの判定をしてから処理することでNullPointerExceptionの発生を食い止める事が出来ます。

4.Nothing

Nothing は全ての型の子要素です。コレクションで、値が何も設定されていない事が表現できます。 以下は String型のリストですが、要素はありません。

val emplist1:List[String] = List()
// emplist : List[String] = List()

Stringと型宣言されていたので、何も問題なかったのですが、型宣言が無い場合で要素が存在しない場合にNothingが登場します。

val emplist2 = List()
// emplist2 : List[Nothing] = List()

Nothingは全ての型の子のため、型が宣言されておらず、空の要素の場合には “Nothing”型のリストとなります。