Elixir(エリクサー)は、並行処理を得意とするプログラミング言語
ErlangのVM(エンジン部分)を基盤とし、Erlangよりもなじみやすい
文法を採用したプログラミング言語です。
本書は、RubyやElixirの伝道師として、そして「達人プログラマー」として知られるDave Thomas氏による、
プログラミング言語Elixirの定番解説書、Programming Elixir 1.6
(Pragmatic Bookshelf, 2018)の日本語訳です。基本的なプログラミングから、
並行処理、さらなる応用へと順を追って進む構成になっています。
本書を読むことで、Elixirらしいプログラミングを学ぶことができます。
第2版では、内容が大幅にアップデートされ、Elixir 1.6以降に対応しただけではなく、
開発ツールの利用を含めたアプリケーション開発の実際についての解説が、より充実したものになっています。
またこの日本語版第2版には、Elixir 1.6以降の周辺事情や、開発現場で
知っておきたい情報をまとめた補遺が追加されています。
https://www.ohmsha.co.jp/book/9784274226373/
正誤表やDLデータ等がある場合はこちらに掲載しています
Elixir作者による前書き
はじめに(正当化のむなしい試み、再び)
第1章 赤いカプセルをとれ
第 I 部 伝統的なプログラミング
第2章 パターンマッチ
第3章 不変性
第4章 Elixirの基礎
第5章 無名関数
第6章 モジュールと名前付き関数
第7章 リストと再帰
第8章 マップ、キーワードリスト、セット、構造体
第9章 寄り道:型とは何か?
第10章 コレクションの処理 ── EnumとStream
第11章 文字列とバイナリ
第12章 制御フロー
第13章 プロジェクトを構成する
第14章 ツールの利用
第 II 部 並行プログラミング
第15章 複数のプロセスを使う
第16章 ノード ── 分散システムの要
第17章 OTP:サーバ
第18章 OTP:スーパーバイザ
第19章 さらに複雑な例
第20章 OTP:アプリケーション
第21章 タスクとエージェント
第 III 部 より高度なElixir
第22章 マクロとコードの評価
第23章 モジュールのリンク:ビヘイビアとuse
第24章 プロトコル ── ポリモーフィック関数
第25章 かっこいい機能いろいろ
付録A 例外:rais、try、catch、throw
付録B 型仕様と型チェック
付録C 参考文献
付録D Elixir 1.6以降の状況と開発運用の実際
付録E 日本語版に寄せて
Elixir作者による前書き
はじめに(正当化のむなしい試み、再び)
第1章 赤いカプセルをとれ
1.1 プログラミングはデータの変換をするものだ
1.2 Elixirのインストール
1.3 Elixirの実行
1.4 この本を読むにあたって
1.5 練習問題
1.6 Think Different(ly)
第 I 部 伝統的なプログラミング
第2章 パターンマッチ
2.1 代入:あなたの考える代入は、私の考える代入ではない
2.2 もっと複雑なマッチ
2.3 _(アンダースコア)で値を無視する
2.4 変数の束縛は(マッチの中で)一度だけ
2.5 等号記号の別の見方
第3章 不変性
3.1 あなたは既に(いくつかの)不変データを知っている
3.2 不変データは既知のデータ
3.3 不変性の性能への影響
3.4 不変データでコーディングする
第4章 Elixirの基礎
4.1 組み込みの型
4.2 値型
4.3 システム型
4.4 コレクション型
4.5 マップ
4.6 日付と時間
4.7 名前、ソースファイル、慣習、演算子など
4.8 変数のスコープ
4.9 基礎の終わり
第5章 無名関数
5.1 関数とパターンマッチ
5.2 一つの関数、複数のボディ
5.3 関数は関数を返すことができる
5.4 関数を引数として渡す
5.5 関数はElixirの中核だ
第6章 モジュールと名前付き関数
6.1 モジュールのコンパイル
6.2 関数のボディはブロックだ
6.3 関数呼び出しとパターンマッチ
6.4 ガード節
6.5 デフォルトパラメータ
6.6 プライベート関数
6.7 素晴らしきパイプ演算子 |>
6.8 モジュール
6.9 モジュールの属性
6.10 モジュールの名前:Elixir、Erlang、そしてアトム
6.11 Erlangのライブラリにある関数の呼び出し
6.12 ライブラリを見つける
第7章 リストと再帰
7.1 ヘッドとテイル
7.2 ヘッドとテイルによるリストの処理
7.3 ヘッドとテイルを使ったリストの構築
7.4 map関数の作成
7.5 リストを単一の値にまとめる
7.6 より複雑なリストのパターン
7.7 実践Listモジュール
7.8 リストと仲良くなろう
第8章 マップ、キーワードリスト、セット、構造体
8.1 マップとキーワードリスト、どちらを使うべきか
8.2 キーワードリスト
8.3 マップ
8.4 マップのパターンマッチと更新
8.5 マップの更新
8.6 構造体
8.7 入れ子になった辞書構造体
8.8 セット
8.9 大いなる力には大いなる誘惑が伴う
第9章 寄り道:型とは何か?
第10章 コレクションの処理 ── EnumとStream
10.1 Enum ── コレクションの処理
10.2 ストリーム ── 遅延列挙
10.3 Collectableプロトコル
10.4 内包表記
10.5 神業との訣別
第11章 文字列とバイナリ
11.1 文字列リテラル
11.2 「文字列」という名前
11.3 シングルクオートで囲まれた文字列 ── 文字コードのリスト
11.4 バイナリ
11.5 ダブルクオート文字列はバイナリ
11.6 バイナリとパターンマッチ
11.7 見慣れた、けれど奇妙な
第12章 制御フロー
12.1 ifとunless
12.2 cond
12.3 case
12.4 例外の発生
12.5 例外を使った設計
12.6 少ない努力で、大きな成果
第13章 プロジェクトを構成する
13.1 プロジェクト:GitHubからIssuesを取得
13.2 ステップ1:Mixを使って新しいプロジェクトを作る
13.3 変換:コマンドライン解析
13.4 基本的なテストを書く
13.5 リファクタリング:大きな関数注意報
13.6 変換:GitHubからの取得
13.7 ステップ2:ライブラリを使う
13.8 変換:レスポンスを加工する
13.9 変換:データを並び替える
13.10 変換:最初のn個を取り出す
13.11 変換:テーブルに整形
13.12 ステップ3:実行可能なコマンドを作成
13.13 ステップ4:ロギングの追加
13.14 ステップ5:プロジェクトドキュメントの生成
13.15 データの変換によるコーディング
第14章 ツールの利用
14.1 IExでのデバッグ
14.2 テスト
14.3 コードの依存関係
14.4 サーバモニタリング
14.5 ソースコードの整形
14.6 予想どおり、もっとある
第 II 部 並行プログラミング
第15章 複数のプロセスを使う
15.1 シンプルなプロセス
15.2 プロセスのオーバヘッド
15.3 プロセスが死ぬとき
15.4 Parallel Map ── Erlangの“Hello, World”
15.5 フィボナッチサーバ
15.6 Agents ── 難問
15.7 プロセスで考える
第16章 ノード ── 分散システムの要
16.1 ノードの名前付け
16.2 プロセスの名前付け
16.3 入力、出力、PID、ノード
16.4 ノードは分散の基本
第17章 OTP:サーバ
17.1 OTPでのいくつかの定義
17.2 OTPサーバ
17.3 GenServerコールバック
17.4 プロセスの名前を付ける
17.5 インターフェースの整理
17.6 サーバをコンポーネントにする
第18章 OTP:スーパーバイザ
18.1 スーパーバイザとワーカ
18.2 ワーカの再起動オプション
18.3 スーパーバイザは信頼の要
第19章 さらに複雑な例
19.1 Duperの導入
19.2 Duperアプリケーション
19.3 さて動くかな?
19.4 自分のElixirアプリケーションを計画しよう
19.5 次に来るのは?
第20章 OTP:アプリケーション
20.1 これは伝統的なアプリケーションではない
20.2 アプリケーション仕様ファイル
20.3 SequenceプログラムをOTPアプリケーションにする
20.4 スーパーバイザが信頼性の基盤
20.5 コードのリリース
20.6 Distillery ── Elixirのリリースマネージャ
20.7 OTPは大きい、信じられないくらい大きい
第21章 タスクとエージェント
21.1 タスク
21.2 エージェント
21.3 大きめの例
21.4 エージェントかタスクか、それともGenServerか?
第 III 部 より高度なElixir
第22章 マクロとコードの評価
22.1 if文の実装
22.2 マクロはコードを注入する
22.3 コードとして表現を利用する
22.4 値の注入のためのバインディングの利用
22.5 マクロは健全
22.6 コード片を走らせる他の方法
22.7 マクロと演算子
22.8 さらに深掘り
22.9 とんでもなく深掘り
第23章 モジュールのリンク:ビヘイビアとuse
23.1 ビヘイビア
23.2 useと__using__
23.3 総まとめ ── 関数呼び出しのトレース
23.4 useを使う
第24章 プロトコル ── ポリモーフィック関数
24.1 プロトコルの定義
24.2 プロトコルの実装
24.3 利用可能な型
24.4 プロトコルと構造体
24.5 組み込みプロトコル
24.6 プロトコルはポリモーフィック
第25章 かっこいい機能いろいろ
25.1 自前のシジルを書く
25.2 複数アプリケーションのアンブレラプロジェクト
25.3 お楽しみはこれからだ!
付録A 例外:rais、try、catch、throw
A.1 例外を起こす
A.2 catch、exit、throw
A.3 独自の例外の定義
A.4 今はこの付録を無視してほしい
付録B 型仕様と型チェック
B.1 いつ型仕様が使われるか
B.2 型の指定
B.3 新しい型の定義
B.4 関数とコールバックの型仕様
B.5 Dialyzerの利用
付録C 参考文献
付録D Elixir 1.6以降の状況と開発運用の実際
D.1 処理系のバージョン管理
D.2 リリース
D.3 アプリケーションのデリバリー
付録E 日本語版に寄せて
E.1 Elixir作者より
E.2 Elixir作者より(第2版発行に寄せて)
E.3 原著者より
E.4 訳者より
索引