プログラミングScala

[cover photo]
  • Dean Wampler、Alex Payne 著、株式会社オージス総研 オブジェクトの広場編集部 訳
  • 2011年01月 発行
  • 544ページ
  • ISBN978-4-87311-481-1
  • フォーマット Print PDF
  • 原書: Programming Scala

オライリー・ジャパンで書籍を購入:
定価4,104円

Ebook Storeで電子版を購入:
価格3,283円


プログラミング言語Scalaの解説書。Scala言語の基本的な機能やScala特有の設計について学ぶことができます。対象読者はJavaやRubyといったオブジェクト指向言語の経験を持つプログラマ。前半は実行可能なサンプルを実際に動かしながら言語の説明をしているため初学者にも読みやすく、後半の言語仕様の詳細やScala独特のイディオム、設計原則、デザインパターン、DSLといった高度な概念についての解説は中上級者にとっても参考になります。日本語版では独自の章を2つ追加し、Scala 2.8における変更点とSimple Build Toolを使ったScalaの開発について解説しました。Scala 2.7/2.8対応。

翻訳者によるサポートページ(2.8対応のサンプルコードをダウンロード可)。

関連書籍

Erlangプログラミング
Java開発者のための関数プログラミング
JavaによるRESTfulシステム構築
Land of Lisp
Real World Haskell
ThoughtWorksアンソロジー
実用Git
デコンパイリングJava
プログラミングF#
プログラミング言語 Ruby

 目次
推薦の言葉
賞賛の声
訳者まえがき
まえがき

1章 イントロダクション ──時速 0マイルから 60マイルまで
    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章  Scala言語の利点 ──少ないタイプで多くのことを
    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章  Scalaプログラミングの基礎 ──基本文法の総点検
    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章 トレイト
    4.1 トレイトの基礎
        4.1.1 ミックスインとしてのトレイト
    4.2 積み重ね可能なトレイト
    4.3 トレイトの生成
        4.3.1 クラスかトレイトか
    4.4 まとめ

5章  Scalaによる初級オブジェクト指向プログラミング
    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章  Scalaによる上級オブジェクト指向プログラミング
    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章 Scalaオブジェクトシステム
    7.1 Predefオブジェクト
    7.2 クラスとオブジェクト: staticはどこにあるか ?
        7.2.1 パッケージオブジェクト
    7.3 シールされたクラス階層
    7.4 Scalaの型階層
    7.5 オブジェクト階層の線形化
    7.6 まとめ

8章 Scalaによる関数型プログラミング
    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章 アクターによる堅牢でスケーラブルな並行処理
    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章  XMLとの連係
    10.1 XMLを読む
        10.1.1 XMLを探索する
        10.1.2 XMLのループとマッチ
    10.2 XMLを書く
        10.2.1 現実世界の例
    10.3 まとめ

11章 ドメイン固有言語
    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章  Scalaの型システム
    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章 アプリケーションの設計
    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章  Scalaのツール、ライブラリ、IDEサポート
    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章  SimpleBuildToolを使った Scalaの開発
    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章 Scala2.8の新機能と移行のポイント、日本語環境、サンプルコード
    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 サンプルコード

付録 A 用語集
付録 B 参考文献
索引

コラム目次
        「静的型付け言語」対「動的型付け言語」
        Scalaコードにおけるインタプリタ実行とコンパイル後実行
        パターンマッチ対ポリモーフィズム
        明示的な型アノテーションが必要になるとき
        2つの項目を持つタプルを生成する 4つの方法
        参照型のための線形化アルゴリズム

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]