Scala 謎かったところまとめ
val, var, defの違い
val
は定数、var
は変数、def
はコード
val
は定数なので、割り当てられたオブジェクトは置き換えができない。
逆にvar
は変数なので、割り当てられたオブジェクトは置き換えられる。
def
はメソッドを定義する際に使う。
trait(トレイト)
trait
は、Javaのインターフェイスのようなものらしい。
なので直接インスタンス化はできない。
lazy
値を遅延評価する。 具体的には、最初にアクセスされたときのみ評価され、定義時には評価されない。 lazyはvalのみに設定できる。 複数回呼び出した場合は、2回目以降は値は評価が行われず、初回の評価結果が返される。 何回評価を行なっても評価結果は同じものに対して使えばいいのかな?
implicit
直訳すると「暗黙的な」という意味。 暗黙的に何かをしてくれる
implicitにはいくつか機能があるらしい
拡張メソッド(enrich my library)
「=>」はいったい何を
trait DogTable extends DefaultJsonProtocol { this: MySQLDBImpl => // MySQLDBImplのが使える? }
コンパニオンオブジェクト
同じソース、パッケージ、クラス内で定義された同名オブジェクトのことで、お互いにプライベートなメンバにアクセスできるやつ
case class(ケースクラス)
ケースクラスの特徴 * インスタンス生成newを省略できる * 基本コンストラクタ引数にすべてvalがついた状態になる * パターンマッチに使える * コンパニオンオブジェクトが生成される * 便利なメソッドが生成される
使えるメソッド
apply applyメソッドはインスタンスを生成します