本書は、オブジェクト指向言語に関数型言語の特長をバランスよく取り込んだ、実用的なプログラミング言語「Scala(スカラ)」の逆引き本です。Scalaの基本構文、標準ライブラリ、ユニットテスト、ビルドツール、データベース、Webプログラミングなど幅広い内容について、著者の現場経験に基づいた実践的なノウハウ・レシピを提供します。これからScalaに触れてみようという方はもちろんのこと、すでにある程度Scalaに関する理解がある方にとっても、「実際の開発時にどのようなコードを書いたら良いかを知るための手引き」として役立てていただける一冊です。
第1章 準備
1.1 セットアップ
001 Scala のセットアップ
002 Eclipse のセットアップ
003 Scala のAPI リファレンスを参照したい
1.2 コンパイルと実行
004 Scala プログラムを実行したい
005 Scala のディレクトリ/ファイル構成を知りたい
006 Scala プログラムをコンパイルせずに実行したい
007 クラスパスを指定したい
008 jar ファイルを実行したい
009 対話型シェル(REPL)を使いたい
第2章 Scala の基本
2.1 コンソール
010 コンソールに出力したい
011 コンソールから入力したい
2.2 パッケージとインポート
012 パッケージを定義したい
013 インポート文の機能を知りたい
014 Predef ってなに?
2.3 変数
015 varとval の違いを知りたい
016 lazy ってなに?
2.4 型
017 Scala の型階層について知りたい
018 型を省略可能/不可能なケースを知りたい
2.5 暗黙の型変換
019 暗黙の型変換について知りたい
020 暗黙の型変換で型を拡張したい
2.6 数値
021 数値同士の型を変換したい
022 数値処理を行ないたい
023 桁あふれや丸め誤差のない計算をしたい
2.7 文字列
024 複数行の文字列リテラルを記述したい
025 文字列をフォーマットしたい
026 文字列を1 行ごとに処理したい
027 文字列を連結したい
028 文字列を比較したい
029 文字列を数値やBoolean に変換したい
030 文字列が正規表現に一致するか調べたい
031 文字列を分割したい
032 正規表現で文字列を検索したい
033 正規表現で文字列を置換したい
2.8 制御構造
034 if から値を返したい
035 for で繰り返し処理を行ないたい
036 for ループをフィルタリングしたい
037 for ループから値を返したい
038 for ループの入れ子を簡単に記述したい
039 ループ処理などを途中で終了したい
2.9 パターンマッチ
040 パターンマッチで条件分岐を行ないたい
041 型でパターンマッチを行ないたい
042 ケースクラスのパターンマッチを行ないたい
043 List や配列のパターンマッチを行ないたい
044 タプルのパターンマッチを行ないたい
045 正規表現でパターンマッチを行ないたい
046 XML のパターンマッチを行ないたい
047 パターンマッチに条件を加えたい
048 マッチした値を変数として参照したい
049 関数の引数に対してパターンマッチを行ないたい
2.10 エラー処理
050 Option 型の使い方を知りたい
051 例外処理について知りたい
052 Either で例外をラップしたい
第3章 関数とクロージャ
3.1 関数
053 関数を定義したい
054 関数を引数として渡したい
055 関数を戻り値として返したい
056 ネストした関数を定義したい
3.2 クロージャ
057 クロージャってなに?
3.3 部分適用
058 メソッドを関数に変換したい
059 一部の引数のみ指定して関数を呼び出したい
060 部分関数ってなに?
3.4 カリー化
061 カリー化について知りたい
062 引数が複数ある関数をカリー化したい
3.5 再帰
063 ループを再帰で処理したい
第4章 オブジェクト指向プログラミング
4.1 クラスとメンバー
064 クラスを定義したい
065 メソッドを定義したい
066 可変長引数を定義したい
067 引数名を指定してメソッドを呼び出したい
068 引数にデフォルト値を設定したい
069 暗黙の引数について知りたい
070 引数を遅延評価させたい
071 フィールドを定義したい
072 コンストラクタを定義したい
073 アクセス修飾子について知りたい
4.2 継承と抽象クラス
074 クラスを継承したい
075 sealed ってなに?
076 抽象クラスを定義したい
077 フィールドやメソッドをオーバーライドしたい
4.3 トレイト
078 トレイトってなに?
079 トレイトをミックスインしたい
080 トレイトの抽象メソッドを拡張したい
081 継承元を指定してメソッドを呼び出したい
082 抽象フィールドが初期化されるタイミングを知りたい
4.4 オブジェクトとケースクラス
083 シングルトンを定義したい
084 コンパニオンオブジェクトってなに?
085 抽出子ってなに?
086 ケースクラスってなに?
087 パッケージオブジェクトってなに?
4.5 列挙型
088 列挙型を定義したい
4.6 ジェネリクス
089 ジェネリクスを定義したい
090 型パラメータに変位を指定したい
091 制限付きの型パラメータを定義したい
092 型パラメータによって呼び出すメソッドを変更したい
093 プリミティブ型を指定する型パラメータを効率化したい
094 型パラメータの情報を取得したい
4.7 型の操作
095 キャストしたい
096 Class オブジェクトを取得したい
097 型に別名を付けたい
098 自分型アノテーションについて知りたい
099 ダックタイピングしたい
4.8 アノテーション
100 アノテーションを付与したい
101 Scala 標準アノテーションについて知りたい
102 独自のアノテーションを作成したい
第5章 コレクション
5.1 コレクションの基礎
103 Scala のコレクションについて知りたい
104 コレクションを比較したい
105 コレクション同士を変換したい
5.2 List
106 List を使いたい
107 List の長さを調べたい
108 List の要素を取得したい
109 List に要素を追加したい
110 List の要素を削除したい
111 List を連結したい
112 List の要素を繰り返し処理したい
113 List の要素を変換したい
114 List の要素をソートしたい
115 List の要素を文字列に変換したい
116 List の一部を切り出したList を作成したい
117 List を分割したい
118 List の要素が条件を満たすか調べたい
119 ネストしたList をフラットにしたい
120 List の要素の集計値を求めたい
121 2 つのList の要素のペアを持つList を作りたい
122 「::」や「:::」とはなんですか?
5.3 Map
123 Map を使いたい
124 Map の要素を繰り返し処理したい
125 Map に要素を追加したい
126 Map を連結したい
127 Map から要素を削除したい
128 Map の要素を変換したい
129 Map の要素をソートしたい
5.4 Set
130 Set を使いたい
131 Set の論理演算を行ないたい
132 ソートされたSet を使いたい
5.5 その他のコレクション
133 配列を使いたい
134 Vector を使いたい
135 タプルを使いたい
136 Stream を使いたい
137 ミュータブルなコレクションを使いたい
138 ミュータブルなコレクションを同期化したい
139 並列コレクションを使いたい
第6章 ファイル操作と入出力
6.1 標準ライブラリによる入出力
140 ファイルを読み込みたい
141 より高度な入出力を行ないたい
6.2 Scala IO
142 Scala IO を使いたい
143 ファイルやディレクトリを扱いたい
144 ファイルやディレクトリを作成したい
145 ファイルやディレクトリを削除したい
146 ファイルやディレクトリをコピー/移動したい
147 ディレクトリ内のファイルやディレクトリを取得したい
148 親ディレクトリを取得したい
149 ファイルやディレクトリの属性を調べたい
150 Path とJava のFile オブジェクトを変換したい
151 ファイルに対して文字列の読み書きを行ないたい
152 ファイルに対してバイナリの読み書きを行ないたい
153 Java の入出力API と連携したい
第7章 XML
7.1 操作
154 Scala のコードにXML を記述したい
155 XML リテラルに変数や式を含めたい
156 XML を読み込みたい
157 XML を保存したい
7.2 検索
158 XML を検索したい
159 要素や属性の値を取得したい
160 要素をコレクションで取得したい
7.3 比較
161 XML を比較したい
第8章 ツール、ユーティリティ
8.1 ユーティリティ
162 外部プログラムを実行したい
163 ログを出力したい
164 JSON を使いたい
165 GUI アプリケーションを作りたい
166 Scala コードを実行時に評価したい
167 日付処理を行ないたい
168 HTTP 通信をしたい
169 パーサコンビネータを使いたい
8.2 ツール
170 scaladoc でAPI リファレンスを作成したい
171 XML をScala クラスにマッピングしたい
172 コンパイラプラグインを使いたい
第9章 並行プログラミング
9.1 導入
173 Scala の並行処理について知りたい
9.2 Akka
174 Akka を使いたい
175 Akka で並行処理を行ないたい
176 Akka のアクターから別のアクターを生成したい
177 Akka で子のアクターの終了をモニタリングしたい
178 Akka でアクターの耐障害性を高めたい
179 Akka でアクターの処理結果を取得したい
180 Akka のFuture にコールバックを定義したい
181 Akka で送信元のアクターへメッセージを返信したい
182 Akka のアクターからメッセージを転送したい
183 Akka でアクターの開始/終了/再起動をフックしたい
184 Akka でホットスワップしたい
185 Akka でリモートアクターを使いたい
186 Akka でアクターへのメッセージ送信をスケジューリングしたい
187 Akka でログを出力したい
188 Akka のアクターでトランザクションを使いたい
9.3 スレッド
189 スレッドで一部の処理を非同期にしたい
190 スレッドで非同期処理から結果を返したい
第10章 Java との連携
10.1 Scala からJava を扱う
191 Scala からJava のクラスを呼び出したい
192 Scala でJava のクラスを継承したい
193 Scala でJava のインターフェイスを実装したい
194 Scala とJava のコレクション型を変換したい
10.2 Java からScala を扱う
195 Java からScala のクラス/オブジェクトを呼び出したい
196 Scala のクラスをJavaBean として扱いたい
197 Scala のプロパティにJava から読み取り可能なアノテーションを付けたい
198 Java でScala が投げる例外を処理したい
199 java コマンドでScala プログラムを実行したい
第11章 sbt
11.1 sbt の使い方
200 sbt をセットアップしたい
201 sbt プロジェクトを作成したい
202 sbt でコンパイルやテストなどを実行したい
203 対話型シェルでsbt を使いたい
204 ライブラリを使いたい
205 一部のライブラリをクラスパスから除外したい
206 リポジトリに存在しないライブラリを使いたい
207 ライブラリをリポジトリにパブリッシュしたい
208 複数のバージョンのScala 向けにビルドしたい
209 複数のsbt プロジェクトをまとめて管理したい
11.2 プラグイン/外部ツールとの連携
210 sbt プラグインを使いたい
211 java コマンドで実行可能なjar ファイルを作りたい
212 環境依存の設定ファイルをビルド時に書き換えたい
213 テストのカバレッジを測定したい
214 sbt でWeb アプリケーションを開発したい
215 sbt でソースコードのクロスリファレンスを生成したい
216 sbt プロジェクトをEclipse で使えるようにしたい
第12章 テスト
12.1 ユニットテストの基本
217 Scala のテスティングフレームワークについて知りたい
218 ScalaTest でテストケースを記述したい
219 ScalaTest で実行結果を検証したい
220 ScalaTest でテストの事前/事後処理を行ないたい
221 Specs2 でテストケースを記述したい
222 Specs2 で実行結果を検証したい
223 Specs2 でテストごとに必要な値を定義したい
224 Specs2 でテストの事前/事後処理を行ないたい
225 指定したテストケースだけを実行したい
226 テストをスキップしたい
12.2 高度なテスト
227 モックライブラリを使ってテストを行ないたい
228 ScalaCheck を使ってテストを行ないたい
229 テストデータを指定してテストを行ないたい
230 ScalaMock を使いたい
231 ScalaMock でクラスやシングルトンのモックを作成したい
232 テストケースをJUnit で実行したい
233 テストの並列実行について知りたい
第13章 フレームワーク
13.1 導入
234 Scala のフレームワークについて知りたい
13.2 Play2
235 Play2 を使いたい
236 Play2 で作成したWeb アプリを運用環境で実行したい
237 Play2 のコントローラを実装したい
238 Play2 のルーティングについて知りたい
239 Play2 のコントローラでリクエストパラメータを取得したい
240 Play2 でフォームを定義したい
241 Play2 でフォームに対応したビューを作りたい
242 Play2 のフォームで高度な入力チェックを行ないたい
243 Play2 のコントローラで共通処理を行ないたい
244 メッセージを国際化したい
245 Play2 でファイルアップロード機能を実装したい
246 Play2 でファイルダウンロード機能を実装したい
247 Play2 でセッションを使いたい
248 Play2 でJSON を使いたい
249 Play2 で外部のWeb API を呼び出したい
250 Play2 でキャッシュを使いたい
251 Play2 でHTML テンプレートを使いたい
252 Play2 でテンプレートを共通化したい
253 Play2 でデータベースにアクセスしたい
254 Anorm でSQL を実行したい
255 Anorm で検索結果をケースクラスにマッピングしたい
256 Play2 でAnorm 以外のデータベースライブラリを使いたい
257 Play2 でWebSocket を使いたい
13.3 Scalatra
258 Scalatra を使いたい
259 Scalatra でリクエストのマッピングを行ないたい
260 Scalatra で事前/事後処理を行ないたい
261 Scalatra でリクエストパラメータを取得したい
262 Scalatra でリクエストパスの一部をパラメータとして取得したい
263 Scalatra でサーブレットAPI を使いたい
264 Scalatra でファイルアップロードを行ないたい
13.4 Scalate
265 Scalatra でテンプレートエンジンを使いたい
266 Scalate のテンプレートを共通化したい
267 Scalate テンプレートの記法を知りたい
268 Scalate テンプレートでVelocity スタイルの記法を使いたい
13.5 ScalaQuery
269 ScalaQuery を使いたい
270 ScalaQuery でSELECT を実行したい
271 ScalaQuery でINSERT を実行したい
272 ScalaQuery でUPDATE を実行したい
273 ScalaQuery でDELETE を実行したい
274 ScalaQuery で検索結果をエンティティにマッピングしたい
275 ScalaQuery でソートやグルーピングを行ないたい
276 ScalaQuery でテーブルをジョインしたい
277 ScalaQuery でサブクエリを実行したい
278 ScalaQuery でSQL を直接実行したい
13.6 Casbah/Salat
279 Casbah を使いたい
280 Casbah でドキュメントを検索したい
281 Casbah でドキュメントを登録したい
282 Casbah でドキュメントを更新したい
283 Casbah でドキュメントをアトミックに更新したい
284 Casbah でドキュメントを削除したい
285 Casbah でソートやグルーピングを行ないたい
286 Casbah でMapReduce を使いたい
287 Casbah でGridFS を使いたい
288 Casbah で高度なクエリを記述したい
289 Casbah でドキュメントをケースクラスにマッピングしたい
13.7 spray
290 spray を使いたい
291 spray でリソースにURI パスを指定したい
292 spray でリソースにHTTP リクエストを指定したい
293 spray でリソースからレスポンスを返したい
294 spray のリソースでクエリパラメータを取得したい
295 spray のリソースでフォームパラメータを取得したい
296 spray でリクエストを任意のクラスで取得したい
297 spray でレスポンスを任意のクラスで返したい
298 spray でJSON とケースクラスを変換したい
299 spray でリソースの処理を非同期に行ないたい
300 spray でリソースに認証/認可を付けたい
付録 Scala 2.10 の新機能
A.1 文字列への変数の埋め込み
A.2 Implicit Class
A.3 値型のクラス
A.4 メソッドやフィールドの動的なディスパッチ
A.5 リフレクションAPI
A.6 Futures とPromises
A.7 言語機能のモジュール化
A.8 マクロ
A.9 その他の変更点
付属データはこちら
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
刷数は奥付(書籍の最終ページ)に記載されています。
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
発生刷 | ページ数 | 書籍改訂刷 | 電子書籍訂正 | 内容 | 登録日 | ||||
---|---|---|---|---|---|---|---|---|---|
1刷 | 244 コード囲み(上)4行目、コード囲み(下)2行目(計2か所) |
未 | 未 |
|
2012.07.04 | ||||
1刷 | 351 下から2行目 |
未 | 未 |
|
2012.07.04 | ||||
1刷 | 407 コード囲み内のコメント |
未 | 未 |
|
2012.07.04 | ||||
1刷 | 497 下から4行目 |
未 | 未 |
|
2012.10.29 |
Tadatoshi Sekiguchi さん
2013-01-17
Scalaの文法から標準ライブラリの使い方まで一通り記載されていて、目次が分かりやすくて引きやすい。周辺ライブラリはsbtのライブラリ指定方法が記載してあり親切。Web時代にもこういう体系だった整理が必要だなと思った一冊。