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つのクラスやトレイトにミックスインできる => 多重継承的なことができる
- 直接インスタンス化できない(クラスではない、コンストラクタの引数はとれない)