Scala はじめました


目次

解説:いまなぜScalaなのか? 羽生田栄一


第1章 Scalaとインストール方法
Scala: Java仮想マシン上の偉大な言語
Scalaのインストール
Scalaコミュニティ


第2章 Scalaの文法、スクリプト、初めてのScalaプログラム
コマンドラインでのScalaScalaスクリプト
初めてのScalaプログラム
Scalaの基本文法


第3章 コレクションとイミュータブルオブジェクトの楽しみ
イミュータブルについて
ScalaのList、Tuple、Option、Mapクラス
XMLの生成と操作


第 4章 関数の楽しみ。JDBCコネクションを閉じる必要はありません
インスタンスとしての関数
名前渡し、値渡し、遅延評価
独自の制御構文を作成する


第5章 パターンマッチ
パターンマッチの基本
関数としてのパターンマッチ
オブジェクト指向と関数型の緊張関係


第6章 アクターと並行処理
並行処理への異なるアプローチ。ロックがないよ!
アクターを定義する
リスナーの実装
アクター:書き込み専用だけじゃない
基本を超えて


第7章 トレイトと型、アーキテクトの秘密道具
いけてないJavaのコード
ライブラリの改造、暗黙の型変換、そして吸血鬼
トレイト:強化されたインタフェース
型:ジェネリクスを超えて
変位
感動的なドウェムジーの階段


第8章 パーサー? BNFは学者だけのものじゃありません
高階関数コンビネータ
四則演算パーサー
JSONをパースする
Twitter JSONパーサー


第 9章 チームをScala化するには
テスト:ビヘイビア駆動開発
ビルドツール
チーム構成
ベストプラクティス
組織にScalaを売り込む

この本は Scala の Web フレームワークである Lift を実装した David Pollak さんが書いた本。
Martin Odersky 教授のいわゆるコップ本よりも読みやすそうだったので、まずはこちらを読むことにした。

Scalaオブジェクト指向言語でもあり、関数型言語でもある。
Scala プログラミング入門』では関数型オブジェクト志向プログラミング言語とされている。
Wikipedia ではこのように説明されている。

Scala - Wikipedia

主に以下のような特徴がある。

* 開発生産性を高める簡潔な表記が可能である
* Javaの豊富なライブラリが使える(.NET Framework上で実行する場合、.NETのライブラリが使える)
* 全てがオブジェクトとして扱われるオブジェクト指向言語である。
* 静的型付けを行う関数型言語である。静的型付けのため、コンパイル時点でのエラー(特に型関連の)検出が得意である。
* 型(クラス)をJavaなどと比べてより容易に作ることができ、また、型を使った条件分岐をはじめとして、型に関する機能が豊富なため、メソッドやメンバ変数を束ねるだけクラスではなく、型に積極的な意味を持たせてのプログラミングが可能である。
* 型推論があるため、多くの場所で型を自動的に補ってくれる
* 純粋関数型言語的な、val(定数)と不変List,Set,Mapという組み合わせでもプログラミングできるし、より手続き型的なvar(変数)と可変List,Set,Mapという組み合わせでもプログラミングができる
* 関数もオブジェクトとして利用可能であり、カリー化が可能
* パターンマッチを利用可能であり、任意のクラスをグループ化してパターンマッチで判定させることが可能(CASEクラス)
* implicit def と言う宣言を用いて、既存のクラスを拡張したような記述が可能
* traitクラスを用いた、Mix-in機能を持つ
* クロージャの利用が可能
* XMLを直接プログラム内部に記述可能
* 標準ライブラリとして、Actorと呼ばれるErlangライクな文法の軽量プロセスが提供されている
* 遅延評価のある関数型言語であるため、無限リストを扱え、標準ライブラリにそのためのクラスが提供されている
* 構文解析のための、パーサーコンビネータが標準ライブラリに入っている
* ユニットテストのためのライブラリが標準ライブラリに入っている


Scala のコードを少し書いてみたところでは、関数型言語としては Haskell の方がすっきりと書ける印象なのだけど、
オブジェクト指向言語 (というより Java) な人々が関数型へシフトするには理想的な、開発現場の現実に配慮した言語と感じた。
そして、GAE や Android で動くというのは、昨今の宣伝文句としてはなかなかよいのではないか。


現時点で試したこと。

  • REPL での対話的実行
  • class のコンパイル
  • Java のライブラリの利用
  • 高階関数によるコレクション操作
  • パターンマッチング (case class の利用)
  • 関数リテラル (無名関数)


試したことで、まだ理解していないこと。

  • なぜ void でなく Unit なのか?


まだ試していないこと。

  • とてもたくさん


まだ Scala のさわり (2章まで) しか勉強していないが、
デフォルトを immutable にすべきか、そうでないかなど、
言語設計上のバランスを慎重に考えないといけない場面は多かっただろうと
コードを書きながら思う。
Scala が徐々に普及している感があるところをみると、
Martin Odersky 教授のバランス感覚はやはり絶妙だったということなのか。


こちらのリンクも参考にした。(連載はまだ全部読んでいない)
The Scala Programming Language
http://www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaReference.pdf
Scala - Wikipedia
刺激を求める技術者に捧げるScala講座---目次 | 日経 xTECH(クロステック)
今からでも遅くない これから始めるScala連載一覧:CodeZine(コードジン)

ゆくゆくはこれらの本も読むことになるだろう。