Scala入門
今回はscala入門です。scalaは今年の春先にすでに環境構築してPlayFrameWork上で動かしたりしてたのですが、いろいろあって最近触ってなかったので、再入門したいと思います。
なぜScalaなのか
Scalaはスケーラブルな言語です。小さなアプリから大規模開発までこなせます。非常にシンプルに柔軟にかけるみたいです。Javaだと、プリミティブ型なのか参照型なのかや、例外処理はきちんと書くものだ!といった考え方が常識ですが、Scalaはそのあたりはだいぶ柔軟です。
プリミティブ型はありませんので、キャストさせる必要がありませんし、例外処理も書くか書かないかは自由です。(Scalaの例外は非チェック例外)そのあたりの考え方はC++っぽいといえます。
あと、これはまだ未検証ですが、Option型の使用により、nullpointexceptionで落ちることがないらしいです。
仕様・特徴
- 代表的な高階関数にmap、filter,foreachがある
Javaだと、
public int sum(int i,int j){
return i+j;
}
こうですが、Scalaだと
def sum(i: Int,j: Int): Int = {
i + j
}
returnなしで書けます。参考演算子も下記のようにif/elseで書けます。
def max(i: Int,j: Int): Int= {
return if(i > j)i else j
}
またScalaではシングルトンも短いコードで生成できます。
object SingletonTest01 {
//フィールドやメソッドを定義するだけ
def sayHello() : Unit = {
println("Hello!")
}
def main(args: Array[String]) : Unit = {
SingletonTest01.sayHello()
}
}
Appトレイトで実行可能なプログラム作成
Appを継承すれば、mainメソッドを書く必要はありません。Appはトレイトで継承されることを前提とした半人前のクラスのようなものです。
object ExecutableTest02 extends App {
println ("Hello World!")
}
Javaではstaticなメソッドやフィールドをclassにもたせることができますが、Scalaのclassはstaticな メンバを持つことができません。そもそもstaticというキーワードがありません。
まとめ
Scala超シンプルで使いやすいですね。ますます好きになりました。これだけシンプルな記法でしかもJVMや関数型プログラミング、型推論、implicit parameterまで使えるんだから使わない手は無いですね。今思いつく難点はややコンパイルに時間がかかることぐらいでしょうか。
次回「Scala入門2」を書くのが今から楽しみです。