Scala 入門した
Scalaとかいう関数型言語
勉強なう。
関数型とか、すべてがオブジェクトとか、そういうのはJavaScriptで見たことある!状態
でも、Scalaを本格的には書いたことがないのです。
ちなみに参考書はこちら
速攻理解!JavaプログラマのためのScalaプログラミング
- 作者: 石黒尚久
- 出版社/メーカー: 秀和システム
- 発売日: 2012/05/23
- メディア: 単行本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (3件) を見る
以下詳細
関数もオブジェクト
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がそれにあたる?いや、どちらかというとシングルトンか?