1.1 なぜ Scalaを使うのか
1.1.1 もしあなたが Javaプログラマなら
1.1.2 もしあなたが Ruby、Pythonなどのプログラマなら
1.1.3 Scalaの紹介
1.1.4 Scalaの誘惑
1.2 Scalaのインストール
1.3 より詳細な情報
1.4 Scalaの味見
1.5 並行処理の味見
1.6 まとめ
2.1 はじめに
2.2 セミコロン
2.3 変数宣言
2.4 メソッド宣言
2.4.1 メソッドのデフォルト引数と名前付き引数( Scala 2.8)
2.4.2 入れ子のメソッド定義
2.5 型情報の推論
2.6 リテラル
2.6.1 整数リテラル
2.6.2 浮動小数点リテラル
2.6.3 ブールリテラル
2.6.4 文字リテラル
2.6.5 文字列リテラル
2.6.6 シンボルリテラル
2.7 タプル
2.8 Option、Some、None:nullの回避
2.9 ファイルと名前空間によるコード構成
2.10 型やメンバのインポート
2.10.1 インポートは相対的
2.11 抽象型とパラメータ化された型
2.12 予約語
2.13 まとめ
3.1 演算子は演算子か
3.1.1 糖衣構文
3.2 丸括弧やドットのないメソッド
3.2.1 優先順位
3.3 ドメイン固有言語
3.4 Scalaのif文
3.5 Scalaのfor内包表記
3.5.1 犬でもわかる犬の例
3.5.2 フィルタリング
3.5.3 yield
3.5.4 スコープの拡大
3.6 その他のループ構文
3.6.1 Scalaのwhileループ
3.6.2 Scalaのdo-whileループ
3.6.3 ジェネレータ式
3.7 条件演算子
3.8 パターンマッチ
3.8.1 シンプルなマッチ
3.8.2 マッチ式の中の変数
3.8.3 型に対するマッチ
3.8.4 シーケンスに対するマッチ
3.8.5 タプル(およびガード)に対するマッチ
3.8.6 ケースクラスに対するマッチ
3.8.7 正規表現に対するマッチ
3.8.8 case節内における入れ子の変数の束縛
3.8.9 tr y-catch-finally節の使用
3.8.10 パターンマッチのまとめ
3.9 列挙
3.10 まとめ
4.1 トレイトの基礎
4.1.1 ミックスインとしてのトレイト
4.2 積み重ね可能なトレイト
4.3 トレイトの生成
4.3.1 クラスかトレイトか
4.4 まとめ
5.1 クラスとオブジェクトの基礎
5.2 親クラス
5.3 コンストラクタ
5.3.1 親クラスのコンストラクタ呼び出し
5.4 入れ子のクラス
5.5 可視性のルール
5.5.1 公開可視性
5.5.2 限定公開可視性
5.5.3 非公開可視性
5.5.4 スコープ指定非公開可視性とスコープ指定限定公開可視性
5.5.5 可視性についての最終的な考察
5.6 まとめ
6.1 クラスとトレイトのメンバをオーバーライドする
6.1.1 final宣言をオーバーライドしようとした場合
6.1.2 抽象/具象メソッドのオーバーライド
6.1.3 抽象/具象フィールドのオーバーライド
6.1.4 トレイトの抽象/具象フィールドのオーバーライド
6.1.5 クラス内の抽象/具象フィールドのオーバーライド
6.1.6 抽象型のオーバーライド
6.1.7 アクセサメソッドとフィールドの区別がないとき:統一形式アクセスの原則
6.2 コンパニオンオブジェクト
6.2.1 apply
6.2.2 unapply
6.2.3 コレクションのための applyとunapplySeq
6.2.4 コンパニオンオブジェクトと Javaの静的メソッド
6.3 ケースクラス
6.3.1 二項演算子用の糖衣構文
6.3.2 Sclala2.8における copyメソッド
6.3.3 ケースクラスの継承
6.4 オブジェクトの等価性
6.4.1 equalsメソッド
6.4.2 ==メソッドと !=メソッド
6.4.3 neメソッドと eqメソッド
6.4.4 Arrayの等価性と sameElementsメソッド
6.5 まとめ
7.1 Predefオブジェクト
7.2 クラスとオブジェクト: staticはどこにあるか ?
7.2.1 パッケージオブジェクト
7.3 シールされたクラス階層
7.4 Scalaの型階層
7.5 オブジェクト階層の線形化
7.6 まとめ
8.1 関数型プログラミングとは何か?
8.1.1 数学における関数
8.1.2 変わらない変数
8.2 Scalaによる関数型プログラミング
8.2.1 関数リテラルとクロージャ
8.2.2 純粋さの内と外
8.3 再帰
8.4 末尾呼び出しと末尾呼び出しの最適化
8.4.1 末尾呼び出しのトランポリン
8.5 関数型データ構造
8.5.1 関数型プログラミングにおけるリスト
8.5.2 関数型プログラミングにおけるマップ
8.5.3 関数型プログラミングにおける集合
8.5.4 関数型プログラミングにおけるその他のデータ構造
8.6 走査、マッピング、フィルタリング、畳み込み、簡約
8.6.1 走査
8.6.2 マッピング
8.6.3 フィルタリング
8.6.4 畳み込みと簡約
8.6.5 関数型の Option
8.7 パターンマッチ
8.8 部分適用された関数と部分関数
8.9 カリー化
8.10 暗黙の型変換とパラメータ
8.10.1 暗黙の型変換
8.10.2 暗黙の関数パラメータ
8.10.3 暗黙の型変換とパラメータに関する最後の考察
8.11 名前渡し、値渡し
8.12 遅延評価値
8.13 まとめ
9.1 状態に関する共有と同期の問題
9.2 アクターとは
9.2.1 概念としてのアクター
9.3 Scalaにおけるアクター
9.3.1 アクターへのメッセージ送信
9.3.2 メールボックス
9.3.3 アクターの詳細
9.3.4 アクターの実践的な使い方
9.4 Scalaにおける従来型の並行処理:スレッドとイベント
9.4.1 その場限りのスレッド
9.4.2 java.util.concurrentの利用
9.4.3 イベント
9.5 まとめ
10.1 XMLを読む
10.1.1 XMLを探索する
10.1.2 XMLのループとマッチ
10.2 XMLを書く
10.2.1 現実世界の例
10.3 まとめ
11.1 内部 DSL
11.1.1 給与計算の内部 DSL
11.1.2 中置演算子記法
11.1.3 暗黙の型変換とユーザー定義型
11.1.4 applyメソッド
11.1.5 給与計算ルール DSLの実装
11.1.6 内部 DSLのまとめ
11.2 外部 DSLとパーサコンビネータ
11.2.1 パーサコンビネータとは
11.2.2 給与計算の外部 DSL
11.2.3 外部 DSL文法の Scalaによる実装
11.2.4 外部 DSLによる給与小切手の生成
11.2.5 内部 DSL対外部 DSL
11.3 まとめ
12.1 型におけるリフレクション
12.2 パラメータ化された型を理解する
12.2.1 マニフェスト
12.2.2 パラメータ化されたメソッド
12.3 継承における変位指定
12.3.1 可変な型の変位指定
12.3.2 「Scalaの変位指定」対「 Javaの変位指定」
12.3.3 実装についての注意
12.4 型境界
12.4.1 上限型境界
12.4.2 下限型境界
12.4.3 Listに関する深い考察
12.4.4 ビューと可視境界
12.5 NothingとNull
12.6 抽象型を理解する
12.6.1 パラメータ化された型か抽象型か
12.7 パス依存型
12.7.1 C.this
12.7.2 C.super
12.7.3 path.x
12.8 値型
12.8.1 型指定子
12.8.2 タプル
12.8.3 パラメータ化された型
12.8.4 アノテーション付きの型
12.8.5 複合型
12.8.6 中置型
12.8.7 関数型
12.8.8 型射影
12.8.9 シングルトン型
12.9 自分型アノテーション
12.10 構造型
12.11 存在型
12.12 無限データ構造と遅延評価
12.13 まとめ
13.1 アノテーション(注釈)
13.2 列挙対パターンマッチ
13.3 アノテーションと列挙についての考察
13.3.1 列挙対ケースクラスとパターンマッチ
13.4 null対Option
13.4.1 Optionとfor内包表記
13.5 例外とその代替手段
13.6 スケーラブルな抽象
13.6.1 細粒度の可視性ルール
13.6.2 ミックスイン合成
13.6.3 自分型アノテーションと抽象型メンバ
13.7 実践的なトレイトの設計
13.8 デザインパターン
13.8.1 Visitorパターン:より良い代替手段
13.8.2 Scalaにおける依存性の注入: Cakeパターン
13.9 契約による設計を使ったより良い設計
13.10 まとめ
14.1 コマンドラインツール
14.1.1 scalacコマンドラインツール
14.1.2 scalaコマンドラインツール
14.1.3 scalap、javap、jadコマンドラインツール
14.1.4 scaladocコマンドラインツール
14.1.5 sbazコマンドラインツール
14.1.6 fscコマンドラインツール
14.2 ビルドツール
14.3 IDEとの統合
14.3.1 Eclipse
14.3.2 IntelliJ
14.3.3 NetBeans
14.3.4 テキストエディタ
14.4 Scalaでのテスト駆動開発
14.4.1 ScalaTest
14.4.2 Specs
14.4.3 ScalaCheck
14.5 その他の注目すべき Scalaのライブラリとツール
14.5.1 Lift
14.5.2 Scalaz
14.5.3 Scalax
14.5.4 MetaScala
14.5.5 JRebel(旧 JavaRebel)
14.5.6 その他雑多なライブラリ
14.6 Javaとの相互運用性
14.6.1 JavaとScalaのジェネリクス
14.6.2 Javaでの Scalaの関数の使用
14.6.3 JavaBeansプロパティ
14.6.4 AnyVal型と Javaのプリミティブ型
14.6.5 Javaコードでの Scalaの名前
14.7 Javaライブラリとの相互運用性
14.7.1 AspectJ
14.7.2 Spring Framework
14.7.3 Terracotta
14.7.4 Hadoop
14.8 まとめ
15.1 Simple Build Tool
15.1.1 プロジェクト環境の構築
15.1.2 対話型シェル
15.2 プログラムの作成
15.2.1 プログラムの仕様
15.2.2 プロジェクト環境構築
15.2.3 依存ライブラリの設定とダウンロード
15.2.4 機能を分析する
15.2.5 一定期間で処理を実行するタイマー機能
15.2.6 XMLからデータを抽出する機能
15.2.7 HTTPによるフェッチ機能
15.2.8 全体をつなぐ
15.3 アプリケーションとして組み立てる
15.4 機能拡張
15.4.1 Entryの処理を拡張可能にする
15.4.2 動的にプラグインを変更する
15.5 まとめ
16.1 Scala 2.8の新機能
16.1.1 scala.collection.jclの廃止と scala.collection.JavaConversionsの導入
16.1.2 新しい配列の実装とポリモーフィックな配列に対するマニフェストの導入
16.1.3 型の特殊化
16.1.4 XMLの等価性の変更
16.1.5 アノテーションの改善
16.1.6 トランポリン
16.1.7 breakのサポート
16.2 バージョン 2.7から 2.8への移行ポイント
16.2.1 Predef.formatメソッドの実装変更
16.2.2 プリミティブ型の別名
16.2.3 パッケージ参照ルールの変更
16.2.4 else節省略時の if文の返り値の変更
16.2.5 Enumeration APIの変更
16.2.6 コレクション APIの戻り値の型の改善
16.2.7 RichStringの廃止
16.2.8 抽象ケースクラスの継承
16.2.9 XMLの等価性の変更
16.2.10 アノテーション
16.2.11 ライブラリ
16.3 Scalaの日本語環境
16.3.1 ソースコードエンコーディング
16.3.2 Scala対話環境
16.3.3 ファイルの日本語の入出力
16.4 サンプルコード
最終更新:2011年01月24日 22:06