書籍概要

実践Scala入門

著者
発売日
更新日

概要

Scalaの言語仕様,そしてエコシステムを解説するScala入門書の決定版!
基本的な構文からはじまり,Scalaに特徴的なOption,Eitherといった型によるnull安全なプログラミング,for式などの強力な機能を伴うコレクション操作,Futureを使った並行プログラミングなどの各種言語機能を学べるほか,Scalaでは事実上の標準となっているビルドシステムsbtの使い方やテストといった現場での開発に必須の知識も身につく,Scalaプログラマ必携の一冊です。

こんな方におすすめ

  • Scalaに興味を持っているITエンジニア
  • 業務でScalaを使う必要のあるITエンジニア

目次

第1章 Scalaひとめぐり

  • Scalaの誕生とこれまで
  • なぜScalaか?
  • ScalaはJVM上で動作する言語
  • 著名なユーザ企業
  • 開発環境
  • はじめてのScalaプログラミング
  • Scaladocの読み方
  • ビルドツールの利用

第2章 Scalaの基礎

  • 基本的な型
  • クラスを定義する
  • トレイトを定義する
  • Scalaにおけるstatic
  • 特別なメソッド名
  • ケースクラス ―― メソッドを自動生成する
  • 制御構文
  • 修飾子
  • ジェネリクスと型パラメータ
  • 名前空間とモジュール分割
  • 無名クラス
  • 暗黙の型変換
  • 暗黙クラス ―― 既存のクラスにメソッドを付け足す
  • 暗黙のパラメータ

第3章 Option/Either/Tryによるエラー処理

  • Option ―― 「値がないかもしれない」を表す
  • Either ―― 失敗した理由を示す
  • Try ―― Option/Eitherと同じ感覚で例外を扱う

第4章 コレクション

  • コレクションのデータ型
  • コレクションを操作するAPI
  • コレクションの実装ごとの性能特性
  • Java標準クラスとScala標準クラスの変換
  • for式によるコレクション操作

第5章 並行プログラミング

  • 並行プログラミングのメリットとデメリット
  • Futureの基本的な使い方
  • Futureを扱うためのAPI

第6章 Scalaプロジェクトのビルド

  • sbtの役割
  • はじめてのsbt
  • build.sbtの書き方
  • sbtシェルのコマンド
  • ビルドのスコープ
  • sbtプラグイン
  • sbtのトラブルシューティング

第7章 ユニットテスト

  • テストの重要性
  • Scalaにおけるユニットテスト
  • Scalaで使えるテストフレームワーク
  • ScalaTestを使ったはじめてのテスト
  • ScalaTestを使いこなす
  • Mockitoを使ったモックテスト
  • ScalaCheckを使ったプロパティベーステスト

第8章 知っておきたい応用的な構文

  • コンパニオンオブジェクト ―― 同名のクラスへの特権的なアクセス権を持つオブジェクト
  • 部分関数 ―― 呼び出し前の引数チェック
  • デフォルト引数 ―― 引数を省略したときの既定値を指定する
  • 名前付き引数 ―― メソッドの引数に名前をつけて呼び出せるようにする
  • 値クラス ―― オブジェクト生成のオーバーヘッドを避ける
  • 型メンバ ―― クラスやトレイト内だけで有効な型の別名を付ける
  • 自分型アノテーション ―― トレイトやクラスに継承でない依存関係をもたせる
  • メソッド引数におけるブロック式 ―― メソッド呼び出しをより簡潔に記述する
  • 複数の引数リストを持つメソッド ―― 部分適用を容易にする
  • η-expansion ―― メソッドを関数に変換する
  • 名前渡し引数 ―― 引数の評価タイミングを制御する
  • 抽出子 ―― 独自のパターンを定義する
  • implicitの探索範囲
  • 特殊なメソッド

第9章 よりよいコーディングを目指して

  • 可能な限り不変にする
  • 式指向なスタイルで書く
  • そのほかのTips

サポート

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2018年11月8日最終更新)

第2章 p.64:上部のコードブロック全体(Shopクラスの実装)


class Staff(val name: String, val age: Int)

class Shop(val name: String) extends AnyRef with Enumerable[Staff] with
Namable {
  private[this] val staffs: List[Staff] = List(new Staff("太郎", 18), new
Staff("花子", 20))

  // foreachの実装を提供する
  override def foreach[B](f: Staff => B): Unit = staffs.foreach(f)
  ...
}
(以下省略)

第4章 p.127:上部のコードブロック1行目および5行目のコメント


// immutableSeqは不変なSeq
scala> val immutableSeq = scala.collection.immutable.Seq(1, 2, 3)
immutableSeq: scala.collection.immutable.Seq[Int] = List(1, 2, 3)

// mutableSeqは可変なSeq
scala> val mutableSeq = scala.collection.mutable.Seq(1, 2, 3)
mutableSeq: scala.collection.mutable.Seq[Int] = ArrayBuffer(1, 2, 3)

第6章 p.187:コードブロック4行目


version := "0.1.0-SNAPSHOT",


version := "0.1",


(以下2018年10月31日更新)

第2章 P.62 コードブロック7行目(mapメソッドの実装)

var members = Buffer.empty[A]

var members = Buffer.empty[B]

第4章 P.137 図4-12左上の数字(畳み込みの最後の値)

3
1

商品一覧