インプレス[コンピュータ・IT]ムック Scalaスケーラブルプログラミング第3版
インプレス / 2016年09月20日 / 全719ページ
使い勝手を極めるScala。ステップ・バイ・ステップで学ぶ!―Scalaは、1行コードから大規模プログラムまで書けるスケーラブルな言語。オブジェクト指向と関数型をバランスよく融合し、並行処理やパーサー・コンビネーターなど標準ライブラリーも豊富に備える。本書では、言語設計者自らが、Scalaの考え方と使い方をステップ・バイ・ステップで解説。第3版では、バージョン2.11/2.12に合わせて内容を更新している。
目次
- 本書について
- はじめに
- 原書(旧版)への賛辞
- 本書の利用にあたって
- 謝辞
- 目次
- 図表リスト目次
- 第01章 スケーラブルな言語 A Scalable Language1.1 プログラマーとともに成長する言語
- 1.2 Scalaがスケーラブルな理由
- 1.3 Scalaを選ぶ理由
- 1.4 Scalaのさまざまなルーツ
- 1.5 まとめ
- 第02章 Scalaプログラミングの第一歩 First Steps in Scala2.1 [ステップ1]Scalaインタープリターの使い方を学ぶ
- 2.2 [ステップ2]変数を定義する
- 2.3 [ステップ3]関数を定義する
- 2.4 [ステップ4]簡単なScalaスクリプトを書く
- 2.5 [ステップ5]whileによるループ、ifによる分岐
- 2.6 [ステップ6]foreachとforによる反復実行
- 2.7 まとめ
- 第03章 Scalaプログラミングの次の一歩 Next Steps in Scala3.1 [ステップ7]配列を型でパラメーター化する
- 本書について
- はじめに
- 原書(旧版)への賛辞
- 本書の利用にあたって
- 謝辞
- 目次
- 図表リスト目次
- 第01章 スケーラブルな言語 A Scalable Language1.1 プログラマーとともに成長する言語
- 1.2 Scalaがスケーラブルな理由
- 1.3 Scalaを選ぶ理由
- 1.4 Scalaのさまざまなルーツ
- 1.5 まとめ
- 第02章 Scalaプログラミングの第一歩 First Steps in Scala2.1 [ステップ1]Scalaインタープリターの使い方を学ぶ
- 2.2 [ステップ2]変数を定義する
- 2.3 [ステップ3]関数を定義する
- 2.4 [ステップ4]簡単なScalaスクリプトを書く
- 2.5 [ステップ5]whileによるループ、ifによる分岐
- 2.6 [ステップ6]foreachとforによる反復実行
- 2.7 まとめ
- 第03章 Scalaプログラミングの次の一歩 Next Steps in Scala3.1 [ステップ7]配列を型でパラメーター化する
- 3.2 [ステップ8]リストを使う
- 3.3 [ステップ9]タプルを使う
- 3.4 [ステップ10]集合とマップを使う
- 3.5 [ステップ11]関数型のスタイルを見分ける
- 3.6 [ステップ12]ファイルから行を読み出す
- 3.7 まとめ
- 第04章 クラスとオブジェクト Classes and Objects4.1 クラス、フィールド、メソッド
- 4.2 セミコロン推論
- 4.3 シングルトンオブジェクト
- 4.4 Scalaアプリケーション
- 4.5 Appトレイト
- 4.6 まとめ
- 第05章 基本型と演算子 Basic Types and Operations5.1 基本型
- 5.2 リテラル
- 5.3 文字列補間
- 5.4 演算子はメソッドである
- 5.5 算術演算
- 5.6 関係演算子と論理演算子
- 5.7 ビット単位演算
- 5.8 オブジェクトの等価性
- 5.9 演算子の優先順位と結合性
- 5.10 リッチラッパー
- 5.11 まとめ
- 第06章 関数型スタイルのオブジェクト Functional Objects6.1 Rationalクラスの仕様
- 6.2 Rationalの構築
- 6.3 toStringメソッドのオーバーライド
- 6.4 事前条件のチェック
- 6.5 フィールドの追加
- 6.6 自己参照6.7 補助コンストラクター
- 6.8 非公開フィールドとメソッド
- 6.9 演算子の定義
- 6.10 Scalaの識別子
- 6.11 メソッドの多重定義
- 6.12 暗黙の型変換
- 6.13 [使用上の注意]演算子メソッドと暗黙の型変換6.14 まとめ
- 第07章 組み込みの制御構造 Built-in Control Structures7.1 if式
- 7.2 whileループ
- 7.3 for式
- 7.4 try式による例外処理
- 7.5 match式
- 7.6 breakとcontinueを使わずに済ませる
- 7.7 変数のスコープ
- 7.8 命令型スタイルのコードのリファクタリング
- 7.9 まとめ
- 第08章 関数とクロージャー Functions and Closures8.1 メソッド
- 8.2 ローカル関数
- 8.3 一人前の存在としての関数
- 8.4 関数リテラルの短縮形8.5 プレースホルダー構文
- 8.6 部分適用された関数
- 8.7 クロージャー
- 8.8 関数呼び出しの特殊な形態
- 8.9 末尾再帰
- 8.10 まとめ
- 第09章 制御の抽象化 Control Abstraction9.1 重複するコードの削減
- 9.2 クライアントコードの単純化
- 9.3 カリー化
- 9.4 新しい制御構造を作る
- 9.5 名前渡しパラメーター
- 9.6 まとめ
- 第10章 合成と継承 Composition and Inheritance10.1 2Dレイアウトライブラリー
- 10.2 抽象クラス
- 10.3 パラメーターなしメソッドの定義
- 10.4 クラスの拡張
- 10.5 メソッドとフィールドのオーバーライド
- 10.6 パラメーターフィールドの定義
- 10.7 スーパークラスコンストラクターの呼び出し
- 10.8 override修飾子の使い方
- 10.9 多相性と動的束縛
- 10.10 ファイナルメンバーの宣言
- 10.11 合成か継承か
- 10.12 above、beside、toStringの実装
- 10.13 ファクトリーオブジェクトの定義
- 10.14 高さを調整するheighten、幅を調整するwiden
- 10.15 レイアウト要素すべてを組み合わせて利用するアプリケーション
- 10.16 まとめ
- 第11章 Scalaの階層構造 Scala’s Hierarchy11.1 Scalaのクラス階層
- 11.2 プリミティブ型の実装方法
- 11.3 最下位(bottom)の2つの型
- 11.4 独自の値クラスの定義
- 11.5 まとめ
- 第12章 トレイト Traits12.1 トレイトの仕組み
- 12.2 シンインターフェイスとリッチインターフェイス
- 12.3 サンプル:矩形オブジェクト
- 12.4 Orderedトレイト
- 12.5 積み重ね可能な変更をそれぞれのトレイトで表現する
- 12.6 Scalaが多重継承ではなくミックスイン合成を選んだ理由
- 12.7 トレイトすべきか、せざるべきか
- 12.8 まとめ
- 第13章 パッケージとインポート Packages and Imports13.1 パッケージにコードをまとめる
- 13.2 関連コードへの簡略なアクセス
- 13.3 インポート
- 13.4 暗黙のインポート13.5 アクセス修飾子
- 13.6 パッケージオブジェクト
- 13.7 まとめ
- 第14章 アサーションとテスト Assertions and Tests14.1 アサーション(assertions)
- 14.2 Scalaにおけるテスト
- 14.3 情報が豊富なエラーレポート
- 14.4 仕様としてのテスト
- 14.5 プロパティベースのテスト
- 14.6 テストの構成と実行
- 14.7 まとめ
- 第15章 ケースクラスとパターンマッチ Case Classes and Pattern Matching15.1 単純なサンプル
- 15.2 パターンの種類
- 15.3 パターンガード
- 15.4 パターンのオーバーラップ
- 15.5 シールドクラス
- 15.6 Option型
- 15.7 どこでもパターンを
- 15.8 より大きなサンプル
- 15.9 まとめ
- 第16章 リストの操作 Working with Lists16.1 リストリテラル16.2 List型
- 16.3 リストの構築
- 16.4 リストに対する基本操作
- 16.5 リストパターン
- 16.6 Listクラスの一階メソッド
- 16.7 Listクラスの高階メソッド
- 16.8 Listオブジェクトのメソッド
- 16.9 複数のリストをまとめて処理する方法16.10 Scalaの型推論アルゴリズムを理解する
- 16.11 まとめ
- 第17章 コレクションの使い方 Working with Other Collections17.1 シーケンス
- 17.2 集合(Set)とマップ
- 17.3 ミュータブルとイミュータブルのどちらを使うべきか
- 17.4 コレクションの初期化
- 17.5 タプル
- 17.6 まとめ
- 第18章 ミュータブルオブジェクト Mutable Objects18.1 どのようなオブジェクトがミュータブルなのか
- 18.2 再代入可能な変数とプロパティ
- 18.3 ケーススタディ:離散イベントシミュレーション
- 18.4 デジタル回路のための言語
- 18.5 シミュレーションAPI
- 18.6 デジタル回路のシミュレーション
- 18.7 まとめ
- 第19章 型のパラメーター化 Type Parameterization19.1 関数型待ち行列
- 19.2 情報隠蔽
- 19.3 変位指定アノテーション
- 19.4 変位指定アノテーションのチェック
- 19.5 下限境界(lower bounds)
- 19.6 反変(contravariance)
- 19.7 オブジェクト非公開データ
- 19.8 上限境界(upper bounds)
- 19.9 まとめ
- 第20章 抽象メンバー Abstract Members20.1 抽象メンバーの弾丸ツアー
- 20.2 型メンバー20.3 抽象val
- 20.4 抽象var
- 20.5 抽象valの初期化
- 20.6 抽象型
- 20.7 パス依存型
- 20.8 リファインメント型
- 20.9 列挙(enumeration)
- 20.10 ケーススタディ:通貨計算
- 20.11 まとめ
- 第21章 暗黙の型変換とパラメーター Implicit Conversions and Parameters21.1 暗黙の型変換
- 21.2 implicitの規則
- 21.3 要求された型への暗黙の型変換
- 21.4 レシーバーの変換
- 21.5 暗黙のパラメーター
- 21.6 コンテキスト境界
- 21.7 複数の型変換を適用できるとき
- 21.8 暗黙の型変換のデバッグ
- 21.9 まとめ
- 第22章 リストの実装 Implementing Lists22.1 Listクラスの原則
- 22.2 ListBufferクラス
- 22.3 Listクラスの実際の中身
- 22.4 関数型の見かけ
- 22.5 まとめ
- 第23章 for式の再説 For Expressions Revisited
- 23.1 for式
- 23.2 N女王問題
- 23.3 for式によるクエリー
- 23.4 for式の変換
- 23.5 逆方向への変換
- 23.6 forの一般化
- 23.7 まとめ
- 第24章 コレクションの探究 Collections in Depth
- 24.1 ミュータブルなコレクションとイミュータブルなコレクション
- 24.2 コレクションの一貫性
- 24.3 Traversableトレイト
- 24.4 Iterableトレイト
- 24.5 シーケンストレイトSeq、IndexedSeq、LinearSeq
- 24.6 集合
- 24.7 マップ
- 24.8 具象イミュータブルコレクションクラス
- 24.9 具象ミュータブルコレクションクラス
- 24.10 配列
- 24.11 文字列
- 24.12 パフォーマンス特性
- 24.13 等価性
- 24.14 ビュー
- 24.15 イテレーター
- 24.16 0からコレクションを作る
- 24.17 JavaコレクションとScalaコレクションの相互変換
- 24.18 まとめ
- 第25章 Scalaコレクションのアーキテクチャ The Architecture of Scala Collections25.1 ビルダー
- 25.2 共通演算の括り出し
- 25.3 新しいコレクションの統合
- 25.4 まとめ
- 第26章 抽出子 Extractors26.1 サンプル:メールアドレスの抽出
- 26.2 抽出子
- 26.3 変数が1個以下のパターン
- 26.4 可変個の引数をとる抽出子
- 26.5 抽出子とシーケンスパターン
- 26.6 抽出子とケースクラス
- 26.7 正規表現
- 26.8 まとめ
- 第27章 アノテーション Annotations27.1 アノテーションを使う理由
- 27.2 アノテーションの構文
- 27.3 標準アノテーション
- 27.4 まとめ
- 第28章 XMLの操作 Working with XML28.1 準構造化データ
- 28.2 XMLの概要
- 28.3 XMLリテラル
- 28.4 シリアライゼーション
- 28.5 XMLの分解
- 28.6 デシリアライゼーション
- 28.7 ロードと保存
- 28.8 XMLを対象とするパターンマッチ
- 28.9 まとめ
- 第29章 オブジェクトを使ったモジュラープログラミング Modular Programming Using Objects29.1 課題
- 29.2 「レシピ」アプリケーション
- 29.3 抽象化
- 29.4 モジュールのトレイトへの分割
- 29.5 実行時リンク
- 29.6 モジュールインスタンスの管理
- 29.7 まとめ
- 第30章 オブジェクトの等価性 Object Equality30.1 Scalaにおける等価性
- 30.2 等価メソッドの開発
- 30.3 パラメーター化された型の等価性の定義
- 30.4 equalsとhashCodeのレシピ
- 30.5 まとめ
- 第31章 ScalaとJavaの結合 Combining Scala and Java31.1 JavaからScalaを使うための注意点
- 31.2 アノテーション
- 31.3 ワイルドカード型
- 31.4 ScalaとJavaを併用したコードのコンパイル
- 31.5 Scala 2.12へのJava 8の統合
- 31.6 まとめ
- 第32章 フューチャーと並行処理32.1 楽園のトラブル
- 32.2 非同期実行とTry
- 32.3 Futureの操作
- 32.4 テストとFuture
- 32.5 まとめ
- 第33章 パーサー・コンビネーター Combinator Parsing
- 33.1 サンプル:算術式
- 33.2 パーサーの実行
- 33.3 基本正規表現パーサー
- 33.4 他のパーサーの使用例:JSON
- 33.5 パーサーの出力
- 33.6 パーサー・コンビネーターの実装
- 33.7 文字列リテラルと正規表現
- 33.8 字句解析と構文解析33.9 エラー報告
- 33.10 バックトラックとLL(1)
- 33.11 まとめ
- 第34章 GUIプログラミング GUI Programming34.1 最初に作るSwingアプリケーション
- 34.2 パネルとレイアウト
- 34.3 イベント処理
- 34.4 サンプル:摂氏・華氏換算プログラム
- 34.5 まとめ
- 第35章 SCellsスプレッドシート The SCells Spreadsheet35.1 ビジュアルフレームワーク
- 35.2 データ入力と表示の分離
- 35.3 数式
- 35.4 数式の構文解析
- 35.5 数式の評価
- 35.6 演算ライブラリー
- 35.7 値の変更の通知
- 35.8 まとめ
- 付録A スクリプトをシェルスクリプトとして実行する方法[UNIX&Windows]
- 用語集
- 参考文献
- 索引
- 監修者 第1版あとがき
- 監修者 第2版あとがき
- 監修者 第3版あとがき
- 著者プロフィール
- プロフィール
- 奥付
※このデジタル雑誌には目次に記載されているコンテンツが含まれています。それ以外のコンテンツは、本誌のコンテンツであっても含まれていません のでご注意ください。
※電子版では、紙の雑誌と内容が一部異なる場合や、掲載されないページがある場合があります。