Scalaのケースクラス(case class)やコンパニオンオブジェクト、トレイト(trait)などを勉強した際のメモです。
🎳 基本用語
| キーワード | 説明 |
|---|---|
| 構文(Syntax) | プログラムが構造をもつためのルール(class、if) |
| 式(Expression) | 評価すると値に変化するもの(1, 1+2, "hoge") |
| 文(Statement) | 式とは対象的に評価しても値にならないもの(val i = 1の全体) |
🍣 ケースクラス
class定義の前にcaseをつけたクラスのことです。
case class Sample(num:Int) |
- インスタンス生成newを省略できる
- コンストラクタのフィールドを公開する(
valがついた状態になる) apply、copy、equals、hashCode、toStringなどのメソッドが生成コンパニオンオブジェクトが生成
- http://qiita.com/lrf141/items/a88bb1579c8880b417da
インスタンスの生成:apply
applyはインスタンスを生成するためのメソッドです。applyは省略できます。
case class Dog(name: String, age: Int) |
既存インスタンスからコピー:copy
copyは既存のインスタンスをベースに新しいインスタンスを生成するメソッドです。
case class Dog(name: String, age: Int) |
参照が等しいかの判定:equals、==
equalsと==は2つのインスタンスの参照が等しいかを判定するメソッドです。
case class Dog(name: String, age: Int) |
🏈 コンパニオンオブジェクト
クラス名と同じ名前をつけたシングルトンのオブジェクトのことです。同名のクラスのprivateメンバにアクセスでき、共通の処理、操作を扱います。
class Dog(id: Int, name: String){ |
コンパニオンオブジェクトの目的は次のとおりです。
- applyを用いたファクトリメソッド
- unapply(インスタンスの構成要素を抽出するためのメソッド)でパターンマッチをできるように
- staticな関数、定数の置き場所
- implicitの解決先(型クラスの定義や暗黙の型変換)
🐯 トレイト(trait)
トレイト(trait)はScalaのオブジェクト指向のモジュール化の中心的な概念。traitは実装を追加できるインターフェイス。クラスの構造を構築するのに使われる。
class Dragon(n: String) { |
traitの特徴
- 複数のトレイトを1つのクラスやトレイトにミックスインできる => 多重継承的なことができる
- 直接インスタンス化できない(クラスではない、コンストラクタの引数はとれない)
