体系的な勉強法や定番はよくわからないので、自分が参考にしたものを挙げます。
Scala は Ruby 以上に変化の速い言語なので、本は参考程度にしかなりません。
プロジェクトでは 2.10 を使っていますが、 2.9 の機能は Obsolete になっているものがいくつもあります。 actor が外れたり macro が入ったりしてます。
全然雰囲気がわからない場合はいいとっかかりになるかもしれません。 私は1度読んだだけで、それ以降つかってないです。なくても困りません。
英語ページを紹介していますが、日本語版もあるものがあります。バージョンには注意してください。
- Tutorials - Scala Documentation: Scala 一回りといったやつです。コップ本をよまないならこちらに目をとおしましょう。
- Scala Style Guide - Scala Documentation: Style Guide。最初に読みましょう。 idea は変な書きかたをしていると警告してくれるので、耳を貸しましょう。
- Guides and Overviews - Scala Documentation: 読み物。大きな機能にあらたに手をだすときは参考にしましょう。
- Scala Standard Library API (Scaladoc) 2.10.2: リファレンス。辞書的に。
なにか調べるときは、まず Scaladoc を見て、つぎに github でコードを読めという話になります。 コードはほとんどが Scala で書かれているので読みやすいです。 sbt や各ライブラリのサイトもチェックしましょう。
RSS リーダーに登録しておきましょう。
- scalaとか・・・: 技術的なことも政治的なことも書かれており、文章も上手でおもしろいです。
- eed3si9n | only the code never lies.: 翻訳などされています。
いちばん良かったのは kata を毎日やってたことです。 Scala は Java とも Ruby とも Haskell とも OCaml とも、微妙につかいかたが違うので、最初は独特の文法や記法に戸惑います。 idea で補完をつかいながら kata をやることで、 List や Map といった基本的なオブジェクトの使い方に習熟できます。
今回はチームで導入するので、リポジトリをつくって、全体で課題をきめて、毎日各人のディレクトリにコミットしたりすると、他のひとのコードも見られるし、サボってるのがバレてよさそうです。 やるなら音頭をとりますので言ってください。
- CodeKata: 簡単なお題がそろっているので最初におすすめ。
- ペアプロ・TDDの『お題』をまとめてみた #tddbc #coderetreat #pp_con - Shinya’s Daily Report: 問題はかなり強弱があるので簡単そうなのを選びましょう。テストも書きましょう。
- Sphere Online Judge (SPOJ): いわゆるプログラミングコンテストの問題ですが、Scala でのジャッジに対応しています。処理系が 2.8.0 らしいので注意。
- Project Euler: 言語非依存だけどむずかしいし、役にたたなそう。
Scalaにおける細かい最適化のプラクティス - scalaとか・・・ に目をとおしてください。
- 高度な機能は避ける。 習熟度が私含め高くないので、 implicit conversion とか macro とか複雑なライブラリをどんどん導入するのは止めましょう。最低限にしましょう。
var
とcollection.mutable
を使うまえに、使わないで解決するとどうなるか考える。 ローカルでもあまり使わないほうがいいです。 インスタンス変数で使うのは極力回避してください。- できるだけ再帰はつかわない。
再帰はコード規模が大きくなり、自由度が上がりすぎます。複雑になりすぎない場合は
foldRight
foldLeft
で処理してください。 - 再帰は
@tailrec
をつける。 末尾再帰にすると@tailrec
アノテーションを付けることができ、多分効率的に実行されます。 末尾再帰じゃない再帰を書かなきゃいけない事はないはず。 Scala @tailrecメモ(Hishidama's Scala @tailrec Memo) - コレクションのコストに敏感になる
他にも practice は共有しましょう。