Scala 入門した

Scalaとかいう関数型言語

勉強なう。
関数型とか、すべてがオブジェクトとか、そういうのはJavaScriptで見たことある!状態
でも、Scalaを本格的には書いたことがないのです。


ちなみに参考書はこちら

速攻理解!JavaプログラマのためのScalaプログラミング

速攻理解!JavaプログラマのためのScalaプログラミング


以下詳細

セミコロンは省略

Rubyっぽいな

関数もオブジェクト

JavaScriptっぽいな。クロージャとかもありそう。

最後に評価した文をreturnする

Rubyっぽいな

型の設計がすごそう?

Scala.Any
┣━Scala.AnyVal(Java のプリミティヴ型に対応)
┃ ┣Int(Javaのintに相当)
┃ ... 以下略

┗━Scala.AnyRef(Javaの参照型に対応)
. ┣String
. ┣Null

こんな風になってる
NullとIntの親が違うから、Int型にNull入れようとすると、コンパイルエラー。
この辺りはJavaと整合性とってる臭い。


あと、Anyを継承しているNothing型があるらしい。
これ、実は、継承の位置づけ的にすべての型のサブタイプらしい。
そしてそのNothing型を継承したオブジェクトにNilがある。


こうなると、何が良いかっていうと、
Nillはすべての型を継承しているので、
List(1,2,3,4)と宣言・初期化するのを
1 :: 2 :: 3 :: 4 :: Nilとか
"a" :: "b" :: Nilとかか書ける
Stringだろうと、Intだろうと、エラーにならない!うれしい!

変数と定数

値を変えられるvarと値を変えられないvalがある。
Javaで書いてたときに、SaveActionsとかで、引数やほぼすべての変数にfinalをつけていた私に隙はなかった。
Scala的には、可能な限りvalを使いましょう、という考え方らしい。

インクリメント・デクリメント

"++"や"--"がなく、-=1とか+=1とか書く、Rubyっぽ

Symbol

SymbolはRubyっぽい

staticなクラス

objectがそれにあたる?いや、どちらかというとシングルトンか?