ちょっとした事情でScalaを使う必要が出てきたため、急いで勉強することにしました。細かい部分は使っていく上で調べればいいと思うので、今回は簡単な部分を書いていきたいと思います。

Scala

  • Scalaとは

    • JVM上で動くプログラミング言語
      • javaのライブラリを使える
    • 関数型とオブジェクト志向のハイブリッドの言語
    • 基本的な内容はJavaに近い?
    • オブジェクトは基本的にimmutable
  • 関数型

    • 関数が完結しているため、リファクタ・テストがしやすい
    • 関数がファーストクラス
      • 関数自体を引数または返り値に指定することが可能

データ型

  • Byte
  • Short
  • Int
  • Long
  • Char
  • String
  • Float
  • Double
  • Boolean

  • デフォルト値としてアンダースコアを使うことができる

    • 変数宣言でvarを使った際
  • Scalaの型はプリミティブではなく全部オブジェクト
    • 値に対してメソッドを呼ぶことができる?

配列

  • 配列の宣言方法
    • var l = new Array
  • 配列のindexは[]ではなくて()で指定する
    • 他の言語とは違って、メソッドのシンタックスシュガーみたいな感じ?

遅延評価

  • 参照されるまで変数自体を評価しない
  • これをすることで高速化が図れるらしい
    • メモリも節約できる?

パターンマッチ

  • Scalaはこれが非常に強力らしい
  • matchを使う
  • caseの部分に記述する条件にはクラスのオブジェクトを使用することができる
  • matchのワイルドカードとして_を指定する
    • ワイルドカードを指定していないパターンマッチで、パターン外の物が出現するとMatchErrorがでる

関数

  • 可変長の引数
    • 関数の引数で「引数名:引数*」で表現する
  • プレースホルダ
    • 関数の中でその値が複数回使われない場合に引数を_で表現する
  • 部分適用
    • 引数の一部を指定した関数を作る?

クラス・オブジェクト

  • クラス

    • 基本コンストラクタ
      • 初期化の処理はクラス内部に直接記述する
      • クラスの引数にval・varを指定しないと、クラス外からアクセスできなくなる
    • 補助コンストラクタ
      • コンストラクタを複数定義しなければならない場合に利用される
  • コンパニオンオブジェクト

    • あるクラスに対して全く同じスコープ・名前で定義されたシングルトンオブジェクト
    • コンパニオンクラスのprivateなフィールドやメソッドに対してアクセスすることができる
    • applyはファクトリみたいな使い方をする
  • unapplyを定義することでパターンマッチに使える

  • case class

    • パターンマッチで使用するような処理などを事前に定義したクラスを定義する仕組み
    • applyが定義されるのでnewを使用せずインスタンス化ができる
      • 内部にでnewしたインスタンスが生成され、returnされる?
    • コンストラクタの引数は全てvalで宣言される
    • unapplyが自動で定義

Trait

  • javaのinterfaceとは異なり、実装を持つことができる
    • interfaceの場合だと、毎回interfaceに定義されているメソッドの内部処理を記述しなければならなくなる

まだ大分残ってるけど、力尽きたのでこんなもんで。残りはやる気がでたらやる

参考文献