内容紹介
プログラミング言語Elixirを学ぶ
Elixir(エリクサー)は、並行処理を得意とするプログラミング言語ErlangのVM(エンジン部分)を基盤とし、Erlangよりもなじみやすい文法を採用したプログラミング言語です。
本書は、世界的なRubyプログラマであるDave Thomas氏が書いた、プログラミング言語Elixirの本格的解説書、“Programming Elixir 1.2” (Pragmatic Bookshelf, 2016) の日本語訳です。通常のプログラミングから、並行処理、さらなる応用へと順を追って進む構成になっています。本書を読むことで、Elixirらしいプログラミングを学ぶことができます。
このような方におすすめ
向上心のあるプログラマ
Elixirに興味のある人
Rubyユーザ
Erlangユーザ
プログラミングを学んでいる学生
情報系の大学生
目次
主要目次
第1章 赤いカプセルをとれ
第I部 伝統的なプログラミング
第2章 パターンマッチ
第3章 不変性
第4章 Elixirの基礎
第5章 無名関数
第6章 モジュールと名前付き関数
第7章 リストと再帰
第8章 マップ、キーワードリスト、セット、構造体
第9章 寄り道:型とは何か?
第10章 コレクションの処理―――Enum とStream
第11章 文字列とバイナリ
第12章 制御フロー
第13章 プロジェクトを構成する
第II部 並行プログラミング
第14章 複数のプロセスを使う
第15章 ノード―――分散システムの要
第16章 OTP:サーバ
第17章 OTP:スーパーバイザ
第18章 OTP:アプリケーション
第19章 タスクとエージェント
第III部 より高度なElixir1
第20章 マクロとコードの評価
第21章 モジュールのリンク: ビヘイビアとuse
第22章 プロトコル―――ポリモーフィック関数
第23章 かっこいい機能いろいろ
付録A 例外:raise、try、catch、throw
付録B 型仕様と型チェック
付録C 参考文献
付録D 日本語版に寄せて
索引
詳細目次
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 基礎の終わり
第5章 無名関数
5.1 関数とパターンマッチ
5.2 一つの関数、複数のボディ
5.3 関数は関数を返すことができる
5.4 関数を引数として渡す
5.5 関数はコアだ
第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 タスク: mix を使って新しいプロジェクトを作る
13.3 変換:コマンドライン解析
13.4 ステップ: 基本的なテストを書く
13.5 変換:GitHub からの取得
13.6 タスク: ライブラリを使う
13.7 変換:レスポンスを加工する
13.8 変換:データを並び替える
13.9 変換:最初のn 個を取り出す
13.10 変換:テーブルに整形
13.11 タスク:実行可能なコマンドを作成
13.12 タスク:ロギングの追加
13.13 タスク:コメントのテスト
13.14 タスク:プロジェクトドキュメントの生成
13.15 データの変換によるコーディング
第II部 並行プログラミング
第14章 複数のプロセスを使う
14.1 シンプルなプロセス
14.2 プロセスのオーバヘッド
14.3 プロセスが死ぬとき
14.4 Parallel Map―――Erlang の“Hello, World”
14.5 フィボナッチサーバ
14.6 Agents―――難問
14.7 プロセスで考える
第15章 ノード―――分散システムの要
15.1 ノードの名前付け
15.2 プロセスの名前付け
15.3 I/O、PID、ノード
15.4 ノードは分散の基本
第16章 OTP:サーバ
16.1 OTP でのいくつかの定義
16.2 OTP サーバ
16.3 GenServer コールバック
16.4 プロセスの名前を付ける
16.5 インターフェースの整理
第17章 OTP:スーパーバイザ
17.1 スーパーバイザとワーカー
17.2 スーパーバイザは信頼のかなめ
第18章 OTP:アプリケーション
18.1 これは伝統的なアプリケーションではない
18.2 アプリケーション仕様ファイル
18.3 Sequence プログラムをOTP アプリケーションにする
18.4 スーパーバイザが信頼性の基盤
18.5 コードのリリース
18.6 EXRM―――Elixir のリリースマネージャ
18.7 OTP は大きい、信じられないくらい大きい
第19章 タスクとエージェント
19.1 タスク
19.2 エージェント
19.3 大きめの例
19.4 エージェントかタスクか、それともGenServer か?
第III部 より高度なElixir
第20章 マクロとコードの評価
20.1 if 文の実装
20.2 マクロはコードを注入する
20.3 コードとして表現を利用する
20.4 値の注入のためのバインディングの利用
20.5 マクロは健全
20.6 コード片を走らせる他の方法
20.7 マクロと演算子
20.8 さらに深掘り
20.9 とんでもなく深掘り
第21章 モジュールのリンク: ビヘイビアとuse
21.1 ビヘイビア
21.2 use と__using__
21.3 総まとめ―――関数呼び出しのトレース
21.4 use を使う
第22章 プロトコル―――ポリモーフィック関数
22.1 プロトコルの定義
22.2 プロトコルの実装
22.3 利用可能な型
22.4 プロトコルと構造体
22.5 組み込みプロトコル
22.6 プロトコルはポリモーフィック
第23章 かっこいい機能いろいろ
23.1 自前のシジルを書く
23.2 複数アプリケーションのアンブレラプロジェクト
23.3 お楽しみはこれからだ!
付録A 例外:raise、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 日本語版に寄せて
D.1 Elixir 作者より
D.2 原著者より
D.3 訳者より
索引
続きを見る