scala

最近scalaが自分のなかで流行ってる(・ω・)/

とりあえず、現在日本語で出版されている唯一のscala

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)

を買って勉強中。

Javaをある程度知っている人(自分も)なら、とりあえずちょっと触っただけでも、Javaで気に入らないところというか、めんどくさいところが簡単に書けるので、それだけでも十分試してみる価値があると思う。

まずは、機能的にはJavaとは変わらないが、すごく細かいところを挙げると・・・

  • setterやgetterの省略記法
  • 型推論
  • デフォルトがpublicなのでpublicと書く必要がない(ていうかpublicってキーワードがない)
  • import文の書き方
  • System.out.println() が println() だけでいい。
    (どうでもいいようだが、個人的には、Javaでちょっとデバックするときに、System.out.printlnと書くのがイライラする(^_^;)ので、こんなことでも嬉しい)
などがある。

しかし、betterJavaとしても使えるが、それだけでは勿体無いほどかなり色々な機能がある。

まずは

  • traitというものがあり(RubyのModuleみたいなやつ)、によるMixinができる。
  • タプルがある
  • タプルによって、メソッドが多値を返すような感じで、戻り値を受け取れる。
  • Map(Rubyだとハッシュ?)が書きやすい。
  • メソッドの名前に記号が使える(見た目は演算子オーバーロード?)だが、scalaでは基本的にすべてメソッド
などなど、更に上げていけばキリがない。
ただ、他の言語とは違うところは、オブジェクト指向関数型言語の融合という設計思想にあり、関数型言語としての特徴を挙げると、
  • ifが値を返す(値を返すのでif文ではなくif式と呼ぶ?)
  • case文(とりあえずはswitch文に似てるけど、使いこなしていくと、かなり違う)も値を返す。
  • クロージャ高階関数(引数に関数ととる関数)がある。
  • 関数がリテラルとしてその場で定義できる。
などなど・・・

そして、最終的には、for式というものがあり、これは、モナドのための記法である。
scala本にも、ある程度は説明されているが、モナドという言葉は一箇所にしか出てこない・・・

まぁ自分は、モナドを使いこなすようなレベルには、全然達してないがorz

scalaでのモナドについては、詳しく解説されてるサイト
を見つけたので、これを読んだりしながら勉強中。

日本語の情報はまだあまりないが、ぜひもっと流行って欲しいと思う。

またscalaでのwebアプリ用のフレームワークLiftというのがあるらしいが、これに関しては、日本語での詳しい情報がほとんど見つからない・・・(-_-;)