Scalaの基礎まとめ その2
この記事はhttp://befool.co.jp/blog/chainzhang/basic-of-scala-1/の引き続きです。
クラス
ScalaはOOPによく使うclass
というコンセプトもしっかりサポートしています。Scalaのクラスにはcase class
とclass
二種類ある。case class
は関数型プログラミングに特化したクラスであって、全てのメンバー変数がval
タイプになる。
Class
Scalaのclass
の定義は関数と少し似ています、しかし、引数がそのままclass
のプロパティー(メンバー変数)になります。なお、scalaはプロパティーのタイプによって、自動的にgetterとsetterを作成します。
タイプ | 権限 |
---|---|
var |
GetterとSetter両方作成します |
val |
Getterのみ作成します |
private var |
GetterとSetter作成しません、class内アクセスのみ |
private val |
GetterとSetter作成しません、class内アクセスのみ |
<空>空> | case class の場合はprivate val になる, class の場合はprivate var になる |
この例では、すべて戻り値のタイプを指定していますが、Scalaは十分スマートなので、戻り値のタイプは普通に書かなくても大丈夫です。もちろん、書いたほうがより良いプログラミング習慣を身につけるでしょう。
Object と trait
ScalaのObjact
はSingleton
の作成、class
と組んでCompinion Objectを作るとかに使います。trait
はScalaでJavaのInterfaceのような役割をしています。JavaのInterfaceよりできること多いです。メソードを既存のclass
にインジェクトしたりすることもできる。
既存のEva
クラスにEvaCounterTrait
をextends
します:
すると、new
で作成されたEva
の数がEva.status
で見れるようになります。
まとめ
Scalaを勉強して2週間ぐらい経って、文法に慣れつつあるものの、Funcation Programming(関数型プログラミング)の思考などに結構難航しています。FPをやると少し高度な数学知識(大学レベル)が必要だなと実感しています。でもScalaは少ないコードで安定したアプリを作れるというとこが魅力で、これからも長く付き合おうと思っています。
ちなみに、この記事は初心者向けて書いています。細かいところは省略しています。もし「Scalaが面白そう」と思ってもらえれば嬉しいです。