社内で発表した時の資料を再編成しました。
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のようなもの