関連サイト
本書の関連ページが用意されています。
内容紹介
使い勝手を極めるScala。ステップ・バイ・ステップで学ぶ!
Scalaは、1行コードから大規模プログラムまで書けるスケーラブルな言語。オブジェクト指向と関数型をバランスよく融合し、並行処理やパーサー・コンビネーターなど標準ライブラリーも豊富に備える。本書では、言語設計者自らが、Scalaの考え方と使い方をステップ・バイ・ステップで解説。第3版では、バージョン2.11/2.12に合わせて内容を更新している。
[第3版での主な変更点]
- Appトレイト
- 文字列補間
- 値クラス
- ScalaTestによるテスト
- 暗黙のクラス
- コンテキスト境界
- ワイルドカード型
- Scala 2.12へのJava 8の統合と活用
- フューチャーによる並行処理
※EPUBファイルは固定レイアウトです。
書誌情報
- 著者: Martin Odersky, Lex Spoon, Bill Venners(著), 長尾高弘(訳), 羽生田栄一, 水島宏太(監修)
- ページ数: 720ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: インプレス
対象読者
Scalaを本格的に学びたい方
著者について
Martin Odersky
Scala言語の作者。スイス・ローザンヌのスイス連邦工科大学教授で、Typesafe, Inc.の創設者。プログラミング言語とシステム、特にオブジェクト指向プログラミングと関数型プログラミングの融合を研究している。2001年以降、Scalaプログラミング言語の設計、実装、改良に全力を注ぐ。以前はJavaジェネリックスの共同設計者として、また現在のjavacリファレンスコンパイラーのオリジナルの作者として、Java の開発にも影響を与えてきている。米国コンピューター学会ACM(Association for Computing Machinery)のフェローでもある。
Lex Spoon
Semmle, Ltd. のソフトウェアエンジニア。ジョージア工科大学で動的言語の静的分析について研究を進め、コンピューター科学の博士号を取得。スイス連邦工科大学ではポストドクターとして2 年間にわたってScala の仕事に携わる。Scala 以外にも、動的言語のSmalltalk から科学言語のX10 や論理言語までさまざまなプログラミング言語を研究している。現在、同氏と妻は、2 匹の猫とチワワとともに米国アトランタに在住。
Bill Venners
Artima Developer のWeb サイト(www.artima.com)を運営するArtima, Inc. の社長。Escalate Software, LLC. の共同創設者。Java プラットフォームのアーキテクチャや内部構造についてのプログラマー向けガイド『Inside the Java Virtual Machine』の著者でもある。JavaWorld(www.javaworld.com)で人気コラムを執筆しており、Java の内部構造、オブジェクト指向設計、Jini などを取り上げている。特にJini コミュニティでは、設立当初から積極的に活動しており、ServiceUI プロジェクトのリーダーを務めている。また、Scala およびJava デベロッパーのためのオープンソーステストツールScalaTest の設計・開発リーダーでもある。
長尾高弘
東京大学教育学部卒。30年ほど前から翻訳に携わり、訳書は『入門Python 3』『UX戦略―ユーザー体験から考えるプロダクト作り』『SOFT SKILLS ソフトウェア開発者の人生マニュアル』『Effective Ruby』『世界でもっとも強力な9のアルゴリズム』『Redis入門 インメモリKVSによる高速データ管理』など130冊を超える。ほかに詩集『頭の名前』『縁起でもない』などがある。
羽生田栄一
株式会社豆蔵 取締役CTO / InfoQJapanチーフエディター。技術士[情報工学部門]。ゼロックス文化圏でSmalltalk-80に触れ、プログラミングを超えたオブジェクト指向やモデリング技術の可能性に目覚め、日本での普及促進とビジネス化を模索。2000年に豆蔵を立ち上げ、オブジェクト指向、モデリング、プロセスにもとづくITコンサルティングと教育・メンタリングを展開。代表取締役、会長を経て、2008年より現職。モットーは、「高い所があれば登って見る・路地があれば入っていき話を聞く」という宮本常一(民俗学者)に教わったモデリングの極意。取り柄は、楽天的なこと。よい加減とも言う。趣味は、街歩き(路地・古書店・富士塚・坂・トマソン物件など探索そぞろ歩き)。
水島宏太
筑波大学大学院の博士課程終了後に就職、現在は株式会社ドワンゴに所属しソフトウェアエンジニアとして働いている。趣味はプログラミング言語の作成。大学院時代の研究テーマは、プログラミング言語の構文解析であり、Scalaは研究と直接の関係はなかったが、いろいろなプログラミング言語を試しているうちに、Scalaの強力さと実用性に気づき、Scalaの普及活動を積極的に行っている。作成した言語のいくつかはhttps://github.com/kmizu/ にて公開している。
目次
第01章 スケーラブルな言語 A Scalable Language
- 1.1 プログラマーとともに成長する言語
- 1.2 Scalaがスケーラブルな理由
- 1.3 Scalaを選ぶ理由
- 1.4 Scalaのさまざまなルーツ
- 1.5 まとめ
第02章 Scalaプログラミングの第一歩 First Steps in Scala
- 2.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 Scala
- 3.1 [ステップ7]配列を型でパラメーター化する
- 3.2 [ステップ8]リストを使う
- 3.3 [ステップ9]タプルを使う
- 3.4 [ステップ10]集合とマップを使う
- 3.5 [ステップ11]関数型のスタイルを見分ける
- 3.6 [ステップ12]ファイルから行を読み出す
- 3.7 まとめ
第04章 クラスとオブジェクト Classes and Objects
- 4.1 クラス、フィールド、メソッド
- 4.2 セミコロン推論
- 4.3 シングルトンオブジェクト
- 4.4 Scalaアプリケーション
- 4.5 Appトレイト
- 4.6 まとめ
第05章 基本型と演算子 Basic Types and Operations
- 5.1 基本型
- 5.2 リテラル
- 5.3 文字列補間
- 5.4 演算子はメソッドである
- 5.5 算術演算
- 5.6 関係演算子と論理演算子
- 5.7 ビット単位演算
- 5.8 オブジェクトの等価性
- 5.9 演算子の優先順位と結合性
- 5.10 リッチラッパー
- 5.11 まとめ
第06章 関数型スタイルのオブジェクト Functional Objects
- 6.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 Structures
- 7.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 Closures
- 8.1 メソッド
- 8.2 ローカル関数
- 8.3 一人前の存在としての関数
- 8.4 関数リテラルの短縮形
- 8.5 プレースホルダー構文
- 8.6 部分適用された関数
- 8.7 クロージャー
- 8.8 関数呼び出しの特殊な形態
- 8.9 末尾再帰
- 8.10 まとめ
第09章 制御の抽象化 Control Abstraction
- 9.1 重複するコードの削減
- 9.2 クライアントコードの単純化
- 9.3 カリー化
- 9.4 新しい制御構造を作る
- 9.5 名前渡しパラメーター
- 9.6 まとめ
第10章 合成と継承 Composition and Inheritance
- 10.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 Hierarchy
- 11.1 Scalaのクラス階層
- 11.2 プリミティブ型の実装方法
- 11.3 最下位(bottom)の2つの型
- 11.4 独自の値クラスの定義
- 11.5 まとめ
第12章 トレイト Traits
- 12.1 トレイトの仕組み
- 12.2 シンインターフェイスとリッチインターフェイス
- 12.3 サンプル:矩形オブジェクト
- 12.4 Orderedトレイト
- 12.5 積み重ね可能な変更をそれぞれのトレイトで表現する
- 12.6 Scalaが多重継承ではなくミックスイン合成を選んだ理由
- 12.7 トレイトすべきか、せざるべきか
- 12.8 まとめ
第13章 パッケージとインポート Packages and Imports
- 13.1 パッケージにコードをまとめる
- 13.2 関連コードへの簡略なアクセス
- 13.3 インポート
- 13.4 暗黙のインポート
- 13.5 アクセス修飾子
- 13.6 パッケージオブジェクト
- 13.7 まとめ
第14章 アサーションとテスト Assertions and Tests
- 14.1 アサーション(assertions)
- 14.2 Scalaにおけるテスト
- 14.3 情報が豊富なエラーレポート
- 14.4 仕様としてのテスト
- 14.5 プロパティベースのテスト
- 14.6 テストの構成と実行
- 14.7 まとめ
第15章 ケースクラスとパターンマッチ Case Classes and Pattern Matching
- 15.1 単純なサンプル
- 15.2 パターンの種類
- 15.3 パターンガード
- 15.4 パターンのオーバーラップ
- 15.5 シールドクラス
- 15.6 Option型
- 15.7 どこでもパターンを
- 15.8 より大きなサンプル
- 15.9 まとめ
第16章 リストの操作 Working with Lists
- 16.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 Collections
- 17.1 シーケンス
- 17.2 集合(Set)とマップ
- 17.3 ミュータブルとイミュータブルのどちらを使うべきか
- 17.4 コレクションの初期化
- 17.5 タプル
- 17.6 まとめ
第18章 ミュータブルオブジェクト Mutable Objects
- 18.1 どのようなオブジェクトがミュータブルなのか
- 18.2 再代入可能な変数とプロパティ
- 18.3 ケーススタディ:離散イベントシミュレーション
- 18.4 デジタル回路のための言語
- 18.5 シミュレーションAPI
- 18.6 デジタル回路のシミュレーション
- 18.7 まとめ
第19章 型のパラメーター化 Type Parameterization
- 19.1 関数型待ち行列
- 19.2 情報隠蔽
- 19.3 変位指定アノテーション
- 19.4 変位指定アノテーションのチェック
- 19.5 下限境界(lower bounds)
- 19.6 反変(contravariance)
- 19.7 オブジェクト非公開データ
- 19.8 上限境界(upper bounds)
- 19.9 まとめ
第20章 抽象メンバー Abstract Members
- 20.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 Parameters
- 21.1 暗黙の型変換
- 21.2 implicitの規則
- 21.3 要求された型への暗黙の型変換
- 21.4 レシーバーの変換
- 21.5 暗黙のパラメーター
- 21.6 コンテキスト境界
- 21.7 複数の型変換を適用できるとき
- 21.8 暗黙の型変換のデバッグ
- 21.9 まとめ
第22章 リストの実装 Implementing Lists
- 22.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 マップ