- トップページ
- Scalaスケーラブルプログラミング[コンセプト&コーディング]
Scalaスケーラブルプログラミング[コンセプト&コーディング]
5,060円(本体 4,600円+税10%)
- 品種名
- 書籍
- 発売日
- 2009/8/21
- ページ数
- 632P
- サイズ
- B5変型判
- 著者
- Martin Odersky、Lex Spoon、Bill Venners 著/長尾高弘 翻訳/羽生田栄一 監修
- ISBN
- 9784844327455
言語設計者自らがScalaの考え方と使い方をステップ・バイ・ステップで解説。
Scalaは、オブジェクト指向と関数型をバランスよく融合し、1行コードから大規模プログラムまで書けるスケーラブルな言語。本書では、設計者自らが、Scalaの考え方と使い方をステップ・バイ・ステップで解説。関数型というパラダイムを学びながら、オブジェクト指向の理解も深められる。次世代言語の標準指標を理解したい人のための、必読の書。原著「Programming in Scala: A Comprehensive Step-by-step Guide」は、優れたIT技術とIT書を讃えるJolt Award(第19回)でProductivity Awardを受賞。
「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。
学校・法人一括購入に関するお問い合わせはこちらへ。
詳細
■ページイメージ
■はじめに(一部抜粋)
■はじめに(一部抜粋)
Javaの経験により、静的型付け言語を使ったプログラミングは、紋切り型のコードを大量に発生させることが明らかになった。そうした紋切り型コードを削減するには、静的型付けを捨てなければならないというのが一般的な考え方であり、Python、Ruby、Groovyなどの動的言語が、日の出の勢いで関心を集めてきた。ところが、Martinの頭脳が生み出した最新の産物であるScalaが、この一般的な考え方の誤りを明らかにしたのである。 |
目次
■監修者あとがき(一部抜粋)
■著者/翻訳者/監修者プロフィール
■もくじ
第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 Applicationトレイト
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 まとめ
第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 まとめ
第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 まとめ
第14章 表明と単体テスト Assertions and Unit Testing
14.1 表明(assertions:アサーション)
14.2 Scalaにおける単体テスト
14.3 情報が豊富なエラーレポート
14.4 JUnitとTestNGの使い方
14.5 仕様としてのテスト
14.6 プロパティベースのテスト
14.7 テストの構成と実行
14.8 まとめ
第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 Scalaの型推論アルゴリズムを理解する
16.10 まとめ
第17章 コレクション Collections
17.1 ライブラリーの概要
17.2 シーケンス
17.3 集合(Set)とマップ
17.4 ミュータブルとイミュータブルのどちらを使うべきか
17.5 コレクションの初期化
17.6 タプル
17.7 まとめ
第18章 ステートフルオブジェクト Stateful 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 列挙(enumeration)
20.9 ケーススタディ:通貨計算
20.10 まとめ
第21章 暗黙の型変換とパラメーター Implicit Conversions and Parameters
21.1 暗黙の型変換
21.2 implicitの規則
21.3 要求された型への暗黙の型変換
21.4 レシーバーの変換
21.5 暗黙のパラメーター
21.6 可視境界
21.7 暗黙の型変換のデバッグ
21.8 まとめ
第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章 抽出子 Extractors
24.1 サンプル:メールアドレスの抽出
24.2 抽出子
24.3 変数が1個以下のパターン
24.4 可変個の引数をとる抽出子
24.5 抽出子とシーケンスパターン
24.6 抽出子とケースクラス
24.7 正規表現
24.8 まとめ
第25章 アノテーション Annotations
25.1 アノテーションを使う理由
25.2 アノテーションの構文
25.3 標準アノテーション
25.4 まとめ
第26章 XMLの操作 Working with XML
26.1 準構造化データ
26.2 XMLの概要
26.3 XMLリテラル
26.4 シリアライゼーション
26.5 XMLの分解
26.6 デシリアライゼーション
26.7 ロードと保存
26.8 XMLを対象とするパターンマッチ
26.9 まとめ
第27章 オブジェクトを使ったモジュラープログラミング Modular Programming Using Objects
27.1 課題
27.2 「レシピ」アプリケーション
27.3 抽象化
27.4 モジュールのトレイトへの分割
27.5 実行時リンク
27.6 モジュールインスタンスの管理
27.7 まとめ
第28章 オブジェクトの等価性 Object Equality
28.1 Scalaにおける等価性
28.2 等価メソッドの開発
28.3 パラメーター化された型の等価性の定義
28.4 equalsとhashCodeのレシピ
28.5 まとめ
第29章 ScalaとJavaの結合 Combining Scala and Java
29.1 JavaからScalaを使うための注意点
29.2 アノテーション
29.3 存在型
29.4 まとめ
第30章 アクターと並行プログラミング Actors and Concurrency
30.1 楽園のトラブル
30.2 アクターとメッセージ交換
30.3 ネイティブスレッドをアクターとして扱う
30.4 スレッドの再利用によるパフォーマンスの向上
30.5 アクターコードのスタイル
30.6 大規模なサンプル:並列離散イベントシミュレーション
30.7 まとめ
第31章 パーサー・コンビネーター Combinator Parsing
31.1 サンプル:算術式
31.2 パーサーの実行
31.3 基本正規表現パーサー
31.4 他のパーサーの使用例:JSON
31.5 パーサーの出力
31.6 パーサー・コンビネーターの実装
31.7 文字列リテラルと正規表現
31.8 字句解析と構文解析
31.9 エラー報告
31.10 バックトラックとLL(1)
31.11 まとめ
第32章 GUIプログラミング GUI Programming
32.1 最初に作るSwingアプリケーション
32.2 パネルとレイアウト
32.3 イベント処理
32.4 サンプル:摂氏・華氏換算プログラム
32.5 まとめ
第33章 SCellsスプレッドシート The SCells Spreadsheet
33.1 ビジュアルフレームワーク
33.2 データ入力と表示の分離
33.3 数式
33.4 数式の構文解析
33.5 数式の評価
33.6 演算ライブラリー
33.7 値の変更の通知
33.8 まとめ
付録A Scalaスクリプトをシェルスクリプトとして実行する方法[UNIX&Windows]
参考文献
用語集
索引
監修者あとがき
著者/翻訳者/監修者紹介
Scalaという言語からは一貫した哲学がにじみ出ている。言語要素とそれらの関係性をできるかぎりシンプルで統一的な観点で設計しようという強い意志を感じる。Smalltalkに対するAlan Kayの設計思想と同じものがそこには流れている。言語要素がすべて部品化されており、データと関数をメンバーとしてオブジェクトを組み立てている。データはすべてオブジェクトであり、関数もFunctionNクラスのオブジェクトであり、操作の対象にできる。Javaと違い完全に純粋なオブジェクト指向言語をJVMの上に実現しているにも関わらず、Javaと実行性能が変わらず、しかも既存のJavaクラスが自由に利用できるという点で実用的な処理系を提供している(作者はJavac1.3やJava Genericsの開発者でもあり、JVMやJavaに精通している)。その意味では、関数型スタイルをとらないとしてもベターJavaとして十分使える実用言語に仕上がっている。 Scalaは言語の文法がきれいかつ簡潔である。最新の言語理論、型理論にもとづいて整合的に設計されている。「変数名:型名」という宣言形式を嫌う人もいるが、UMLにも適合するある意味一般性のある簡潔な文法がうれしい。必要に応じて省略可能な文法の簡潔さは、現在流行しているRubyやPythonなどの動的型付け言語(いわゆる軽量スクリプト言語)に匹敵するが、一方で型推論機能をもっているおかげもあって強い型付けは維持して安全性・信頼性を確保している。 関数型言語としても十分な機能を提供しているにも関わらず、map関数などに不慣れでも、for式(実はこれがモナドになっているのだが利用者にはまったく気づかせない)でループを回すつもりで、一人前の関数(function as a first class object)を自在に利用した高階関数プログラミングの世界に自然に入っていける。 ほかにも大規模並列計算に十分耐えうるアクター理論にもとづく並列計算のフレームワークがもともとの言語機能であるかのごとく自然に提供されているのも、クラウドコンピューティングの時代にScalaが注目される理由にもなっている。 ScalaがポストJava言語として最有力候補であることは疑いないが、もし仮にそうならないとしても、以上に述べたようなScalaのもつ諸特性の一端に触れる経験は、プログラマーにもアーキテクトにもドメインエンジニアにも大きなヒントと新しい発想の枠組みを提供してくれることは間違いない。そういう視点で、Scalaという新しい言語に取り組む人が少しでも増えてくれればよい、と考えて本書の翻訳を企画した。 本書は、入門書として、言語チュートリアルとして、読後は簡潔な言語ガイドブックとして格好の内容になっている。Scalaの生みの親とその仲間たちが著者だというだけでなく、言語の使い方のポイントと言語の内部の仕組みとを要所要所で簡潔に説明してくれるので、あとあと応用が利くというメリットもある。本書が日本における関数型オブジェクト指向の大きなうねりを生み出す一助となれば本望である。 |
■著者/翻訳者/監修者プロフィール
Martin Odersky[マーティン・オダースキー] Scala言語の作者。スイス・ローザンヌのスイス連邦工科大学教授として、プログラミング言語、特にオブジェクト指向プログラミングと関数型プログラミングの言語を研究している。研究のポイントは、2つのパラダイムが同じコインの裏表であり、両者はできる限り統合されるべきだというもの。このことを証明するために、Pizza、GJ、Functional Netsなどの言語設計の実験を進めてきた。Javaジェネリックスの共同設計者として、また現在のjavacリファレンスコンパイラーのオリジナルの作者として、Javaの開発にも影響を与えてきている。2001年以来、Scalaプログラミング言語の設計、実装、改良に全力を注ぐ。 Lex Spoon[レックス・スプーン] Googleのソフトウェアエンジニア。ジョージア工科大学で動的言語の静的分析について研究を進め、コンピューター科学の博士号を取得。スイス連邦工科大学ではポストドクターとして2年間に渡ってScalaの仕事に携わる。Scala以外にも、動的言語のSmalltalkから科学言語のX10までさまざまなプログラミング言語を研究している。現在、妻と2匹の猫、1匹の犬、1匹の亀とともに米国アトランタに在住。 Bill Venners[ビル・ベナーズ] Artima DeveloperのWebサイト(www.artima.com)を運営するArtima, Inc.の社長。Javaプラットフォームのアーキテクチャや内部構造についてのプログラマー向けガイド『Inside the Java Virtual Machine』の著者でもある。JavaWorld(www.javaworld.com)で人気コラムを執筆しており、Javaの内部構造、オブジェクト指向設計、Jiniなどを取り上げている。特にJiniコミュニティでは、設立当初から積極的に活動しており、ServiceUIプロジェクトのリーダーを務めている。このプロジェクトによるServiceUI APIは、Jiniサービスにユーザーインターフェイスを対応付けるための事実上の標準となっている。Billは、ScalaおよびJavaデベロッパーのためのオープンソーステストツールScalaTestの設計・開発リーダーでもある。 長尾 高弘[Takahiro Nagao] 東京大学教育学部卒。20年ほど前から翻訳に携わり、訳書は『入門Objective-C 2.0』『プログラミング言語Ruby』『Unix/Linuxプログラミング理論と実践』『続・初めてのPerl』『プログラミング言語C++第3版』『アドバンスドJAVA』『ポータブルCプログラミング』など60冊を越える。ほかに詩集『頭の名前』『縁起でもない』などがある。 羽生田 栄一[Eiiti Hanyuda] 株式会社豆蔵 取締役プロフェッショナルフェロー/豆蔵ソフト工学ラボ所長。ゼロックス文化圏でSmalltalk-80に触れ、プログラミングを超えたオブジェクト指向やモデリング技術の可能性に目覚め、日本での普及促進とビジネス化を模索。2000年に豆蔵を立ち上げ、オブジェクト指向、モデリング、プロセスにもとづくITコンサルティングと教育・メンタリングを展開。代表取締役、会長を経て、2008年より現職。モットーは、「高い所があれば登って見る・路地があれば入っていき話を聞く」という宮本常一(民俗学者)に教わったモデリングの極意。取り柄は、楽天的なこと。よい加減とも言う。趣味は、街歩き(路地・古書店・富士塚・坂・トマソン物件など探索そぞろ歩き)。 |
■もくじ
第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 Applicationトレイト
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 まとめ
第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 まとめ
第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 まとめ
第14章 表明と単体テスト Assertions and Unit Testing
14.1 表明(assertions:アサーション)
14.2 Scalaにおける単体テスト
14.3 情報が豊富なエラーレポート
14.4 JUnitとTestNGの使い方
14.5 仕様としてのテスト
14.6 プロパティベースのテスト
14.7 テストの構成と実行
14.8 まとめ
第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 Scalaの型推論アルゴリズムを理解する
16.10 まとめ
第17章 コレクション Collections
17.1 ライブラリーの概要
17.2 シーケンス
17.3 集合(Set)とマップ
17.4 ミュータブルとイミュータブルのどちらを使うべきか
17.5 コレクションの初期化
17.6 タプル
17.7 まとめ
第18章 ステートフルオブジェクト Stateful 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 列挙(enumeration)
20.9 ケーススタディ:通貨計算
20.10 まとめ
第21章 暗黙の型変換とパラメーター Implicit Conversions and Parameters
21.1 暗黙の型変換
21.2 implicitの規則
21.3 要求された型への暗黙の型変換
21.4 レシーバーの変換
21.5 暗黙のパラメーター
21.6 可視境界
21.7 暗黙の型変換のデバッグ
21.8 まとめ
第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章 抽出子 Extractors
24.1 サンプル:メールアドレスの抽出
24.2 抽出子
24.3 変数が1個以下のパターン
24.4 可変個の引数をとる抽出子
24.5 抽出子とシーケンスパターン
24.6 抽出子とケースクラス
24.7 正規表現
24.8 まとめ
第25章 アノテーション Annotations
25.1 アノテーションを使う理由
25.2 アノテーションの構文
25.3 標準アノテーション
25.4 まとめ
第26章 XMLの操作 Working with XML
26.1 準構造化データ
26.2 XMLの概要
26.3 XMLリテラル
26.4 シリアライゼーション
26.5 XMLの分解
26.6 デシリアライゼーション
26.7 ロードと保存
26.8 XMLを対象とするパターンマッチ
26.9 まとめ
第27章 オブジェクトを使ったモジュラープログラミング Modular Programming Using Objects
27.1 課題
27.2 「レシピ」アプリケーション
27.3 抽象化
27.4 モジュールのトレイトへの分割
27.5 実行時リンク
27.6 モジュールインスタンスの管理
27.7 まとめ
第28章 オブジェクトの等価性 Object Equality
28.1 Scalaにおける等価性
28.2 等価メソッドの開発
28.3 パラメーター化された型の等価性の定義
28.4 equalsとhashCodeのレシピ
28.5 まとめ
第29章 ScalaとJavaの結合 Combining Scala and Java
29.1 JavaからScalaを使うための注意点
29.2 アノテーション
29.3 存在型
29.4 まとめ
第30章 アクターと並行プログラミング Actors and Concurrency
30.1 楽園のトラブル
30.2 アクターとメッセージ交換
30.3 ネイティブスレッドをアクターとして扱う
30.4 スレッドの再利用によるパフォーマンスの向上
30.5 アクターコードのスタイル
30.6 大規模なサンプル:並列離散イベントシミュレーション
30.7 まとめ
第31章 パーサー・コンビネーター Combinator Parsing
31.1 サンプル:算術式
31.2 パーサーの実行
31.3 基本正規表現パーサー
31.4 他のパーサーの使用例:JSON
31.5 パーサーの出力
31.6 パーサー・コンビネーターの実装
31.7 文字列リテラルと正規表現
31.8 字句解析と構文解析
31.9 エラー報告
31.10 バックトラックとLL(1)
31.11 まとめ
第32章 GUIプログラミング GUI Programming
32.1 最初に作るSwingアプリケーション
32.2 パネルとレイアウト
32.3 イベント処理
32.4 サンプル:摂氏・華氏換算プログラム
32.5 まとめ
第33章 SCellsスプレッドシート The SCells Spreadsheet
33.1 ビジュアルフレームワーク
33.2 データ入力と表示の分離
33.3 数式
33.4 数式の構文解析
33.5 数式の評価
33.6 演算ライブラリー
33.7 値の変更の通知
33.8 まとめ
付録A Scalaスクリプトをシェルスクリプトとして実行する方法[UNIX&Windows]
参考文献
用語集
索引
監修者あとがき
著者/翻訳者/監修者紹介
関連書籍
ダウンロード
本製品の読者さまを対象としたダウンロード情報はありません。
お詫びと訂正
誤記のためにご迷惑をおかけし、誠に申し訳ございません。
- 30ページ 冒頭リスト部分
- [誤]
リストのページまたぎを示す上向き三角と下向き三角の配置が間違っています - [正]
下向き三角は29ページのリスト末尾に
下向きの三角は30ページのリスト先頭に移動 - 【 第3刷にて修正 】
- [誤]
- 39ページ 本文 下から5行目
- [誤]
共通アクセス原則は、 - [正]
統一形式アクセスの原則は、 - 【 第3刷にて修正 】
- [誤]
- 40ページ 本文 上から3行目
- [誤]
ピーター・ラディン - [正]
ピーター・ランディン - 【 第3刷にて修正 】
- [誤]
- 51ページ 脚注※12の2行目
- [誤]
要素ε集合 - [正]
要素∈集合 -
備考:よく使われている記号に変更しました
- 【 第3刷にて修正 】
- [誤]
- 63ページ 下から7行目
- [誤]
そのため、3行目でSetと書いた - [正]
そのため、2行目でSetと書いた - 【 第3刷にて修正 】
- [誤]
- 71ページ リストの上から5行目(-の脱字)
- [誤]
val numSpaces = maxWidth widthOfLength(line) - [正]
val numSpaces = maxWidth - widthOfLength(line) - 【 第3刷にて修正 】
- [誤]
- 78ページ 脚注(※2)の4行目
- [誤]
WeakHaskMap - [正]
WeakHashMap - 【 第3刷にて修正 】
- [誤]
- 97ページ ページ下から2行目
- [誤]
左シフトと右シフトは、シフトして空になった桁に0をセットする。 - [正]
左シフトと符号なし右シフトは、シフトして空になった桁に0をセットする。 - 【 第3刷にて修正 】
- [誤]
- 100ページ ページ上のコラムタイトル
- [誤]
どうに違うのか - [正]
どのように違うのか - 【 第3刷にて修正 】
- [誤]
- 104ページ 本文 下から2行目
- [誤]
自然言語サポートのような感じのライブラリーを - [正]
「言語の元々の機能としてサポート」されているかのように感じられるライブラリーを - 【 第3刷にて修正 】
- [誤]
- 142ページ 見出し「8.1 メソッド」のあと 本文7行目
- [誤]
中で <urceオブジェクトの - [正]
中でSourceオブジェクトの - 【 第3刷にて修正 】
- [誤]
- 142ページ 見出し「8.1 メソッド」のあと 本文7行目
- [誤]
getLinesメゾット - [正]
getLinesメソッド - 【 第3刷にて修正 】
- [誤]
- 148ページ 本文 上から6行目
- [誤]
冗舌 - [正]
饒舌 - 【 第3刷にて修正 】
- [誤]
- 162ページ 最初のリストの下 本文3行目
- [誤]
_.endWith(_) - [正]
_.endsWith(_) - 【 第3刷にて修正 】
- [誤]
- 170ページ 3つ目のリストの下 本文2行目
- [誤]
myAdssert - [正]
myAssert - 【 第3刷にて修正 】
- [誤]
- 196ページ 図11.1
- [誤]
【Short】と【Byte】の四角形をつなぐ実線が余分 - [正]
上記の実線を削除 - 【 第3刷にて修正 】
- [誤]
- 210ページ 2つ目のリスト内 上から4行目
- [誤]
this.numer * that.denom > that.numer * this.denom - [正]
this.numer * that.denom < that.numer * this.denom - 【 第3刷にて修正 】
- [誤]
- 212ページ ページ中央 箇条書きの3行目
- [誤]
待ち行列から負数を取り除く - [正]
待ち行列への負数の追加を排除する - 【 第3刷にて修正 】
- [誤]
- 217ページ 上から3行目
- [誤]
実際にはいずれも値はインクリメントされたり、倍にされたりはしないのである。 - [正]
実際にはいずれの場合も、インクリメントされた後に倍にされた値は手に入らない。 - 【 第3刷にて修正 】
- [誤]
- 219ページ 見出し「12.7 トレイトすべきか、せざるべきか」のあと 本文7行目
- [誤]
「Javaコードを継承できるようにしたい場合」 - [正]
「Javaコードで継承できるようにしたい場合」 - 【 第3刷にて修正 】
- [誤]
- 282ページ コラム内本文の7行目
- [誤]
x :: cs - [正]
x :: xs - 【 第3刷にて修正 】
- [誤]
- 293ページ 2つ目のリストの上 本文 下から2行目
- [誤]
1 j<i<5 - [正]
1≦j<i<5 - 【 第3刷にて修正 】
- [誤]
- 299ページ 本文の下から2行目
- [誤]
until未満の値になるまでのリスト - [正]
until未満の値である間のリスト - 【 第3刷にて修正 】
- [誤]
- 307ページ 図17.2 【AnyRef】四角形内のテキスト
- [誤]
<<trai>> - [正]
<<trait>> - 【 第3刷にて修正 】
- [誤]
- 316ページ 本文2行目
- [誤]
である。、scala.collection. - [正]
である。scala.collection. - 【 第3刷にて修正 】
- [誤]
- 380ページ 本文 上から4行目
- [誤]
の は、宣言された段階では - [正]
のTは、宣言された段階では - 【 第3刷にて修正 】
- [誤]
- 511ページ リスト上の本文 下から1行目
- [誤]
@SerialVersionUID(134L) - [正]
@SerialVersionUID(1234L) - 【 第3刷にて修正 】
- [誤]
- 561ページ コラム内 本文5行目 6行目 11行目
- [誤]
読者 - [正]
読み手 - 【 第3刷にて修正 】
- [誤]
- 565ページ 2つ目のリスト上の本文 下から3行目
- [誤]
<~と~<の - [正]
<~と~>の - 【 第3刷にて修正 】
- [誤]
- 606ページ 用語集の左段「値渡しパラメーター」の2行目頭
- [誤]
ば(x:=Int)のように - [正]
ば(x:Int)のように - 【 第3刷にて修正 】
- [誤]
- 608ページ 左段 「サブクラス」の用語解説
- [誤]
クラスは、すべてのスーパークラスとスーパートレイトのサブクラスである。 - [正]
クラスは、自分自身のすべてのスーパークラスとスーパートレイトのサブクラスである。 - 【 第3刷にて修正 】
- [誤]
- 608ページ 左段 「サブトレイト」の用語解説
- [誤]
トレイトは、すべてのスーパートレイトのサブトレイトである。 - [正]
トレイトは、自分自身のすべてのスーパートレイトのサブトレイトである。 - 【 第3刷にて修正 】
- [誤]
お問い合わせ
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。