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メソッドはインスタンスを生成します