fujithuro.log

プログラマーの雑多な書き残しです

Scalaについての基礎知識

社内で発表した時の資料を再編成しました。

Scalaについて、勉強してここまでは理解しましたという資料です。

トレイト(trait)

  • Javaでいうインターフェース
  • 抽象メンバと具象メンバのどちらも持てる
  • 複数のトレイトをミックスイン(Javaでいう継承)することができる
  • クラスを継承できる
  • トレイトの中にトレイトやクラスを定義できる
  • ミックスインは、静的な定義としてだけでなく、あとからも(インスタンス生成時に)行える。
    • つまり「こういう条件ならこのトレイトをミックスイン」みたいなことができる

タプル(tuple)

  • 型を気にしないで何でも入れられるイミュータブルなリスト、みたいな感じ
  • 戻り値として複数の値を返したり、クラスを作るまでもないような簡単なデータを表したり
  • 要素が2つならPair、3つならTripleという別名が使える
  • 要素の番号は1始まり
  • 使い方の例(イメージ)
val userA: (Int, String) = (1, "Tom")
val userB: (Int, String) = Pair(2, "John")

userA._2  // "Tom"

パターンマッチ

  • 条件分岐するんじゃなく、パターンマッチできる。これがScalaの良いところ(強いところ)の一つ
  • 型で、タプルで、正規表現で、ケースクラスで、など色んな条件が使える
  • 上から順にマッチするかチェックされて、どこかに入ればそれで終わり。
  • 使い方の例(イメージ)
式 match {
    case パターンA => { Aの時の処理 }
    case パターンB => { Bの時の処理 }
    case _ => {AでもBでもなかった時の処理}
}

ケースクラス(case class)

  • パターンマッチと相性が良い
  • Kotlinのdata classのようなもの