...

Programming Elixir

by user

on
Category: Documents
9

views

Report

Comments

Transcript

Programming Elixir
Elixir
Dave Thomas
笹田耕一・鳥井雪
P1.0P1.1, 2016-08-202016-08-20
Build date: 2016 年 8 月 9 日
(m-sl b-n bc-n)
Original English language title:
Programming Elixir 1.2
by Dave Thomas
Published by The Pragmatic Programmers, LLC.
Copyright © 2016 The Pragmatic Programmers, LLC.
Translation Copyright © 2016 Ohmsha, Ltd.
All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in
any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise,
without the prior consent of the publisher.
本書 発行
,内容 誤
本書 内容 適用
結果生
,
,適用
版社
一切 責任 負
了承
.
本書 掲載
限
会社名・製品名 一般 各社 登録商標
注意
結果
払
商標
,
,著者,出
.
本書 ,
「著作権法」
,著作権等 権利 保護
著作物
.本書 複
製権・翻訳権・上映権・譲渡権・公衆送信権(送信可能化権 含 ) 著作権者 保有
.本書 全部
一部
,無断 転載,複写複製,電子的装置
入力等
,著作権等 侵害
場合
, 注意
.
本書 無断複写 ,著作権法上 制限事項 除 ,禁
.本書 複写複製
希望
場合 ,
事前 下記 連絡
許諾 得
.
社書籍編集局「<書名 記載>」係宛,E-mail ([email protected])
•
書状,FAX(03-3293-2824)
推薦
Programming Elixir
。Programming Elixir
Dave Thomas
本
。
入門書 、
教
単純
超
、
待望
無個性
。
例
本 、Elixir
教
考
。
ä Bruce Tate
icanmakeitbetter.com CTO、著述家
、Dave
Programming Elixir
、楽
、実用的
洞察
満
。
発見
知
微笑
素晴
仕事 成 遂
紹介
今現在
、
側面
側面
、
新
。
、
、自然
、
再考
、読者 、Elixir
、
洗練
。
方法
直感的
、長
行
思
可能
、
気
方法
本 、Elixir
概要 詳
生産性
高
、分散
並行、耐故障性
、
方
本 読 進
、
。関数
。
示
試
、開発
。Dave
説明
、回復力 高
。
Erlang
。
Elixir
書 力 与
。
ä Alexei Sholik
手続
型
時代
持 、
新
世界
。
向
過
去
。今日
、耐故障性
主役
一人
読
、
本
有利
切
、高
並行 動 。Elixir
。Erlang
OTP
開発
力
、大勢
、次
来
新
大
波
。
ä Paul Butcher
Seven Concurrency Models in Seven Weeks 著者
本
Ruby
。Dave
、OTP、
本
Dialyzer
、楽
思考
読
、
本
方 、構造体
、Elixir 言語
、読者
一通
、Programming Elixir
幅広
Elixir
。
学習
体験
、
。Elixir 言語
最適
ä Jim Freeze
Elixir 国際
・
Elixir
、彼 非 打
初代
iii
投資
。
関数
習得
加速
iv
Programming Elixir
本 疑
推薦
、Elixir
素晴
本 。……Thomas
、熱意
一読 価値
込
。Elixir
読者 、Elixir
興味
、
。
ä Dan Kozlowski
Programming Elixir
、私
Dave Thomas
。
使
、新
関数
喜
言語
本 読
感
。読者
方
付
、各章
今
題解決
考
快挙 。Programming Elixir 以前
手
、
言語
読
。
、結局自分
、Dave
一通
情熱 、
考
方
。
本
、私
、劇的
、
良
方
触
言語
、問
変
。
ä Richard Bishop
本
能
楽
慌
般 両方 取
ä Cody Russell
本
、Elixir
。Elixir
、考
抜
導入
。
関数
機
一
Elixir(日本語版)
推薦
2014 年 3 月
Erlang Factory
、Ruby
現
Dave Thomas
係
思
私
想
上
作
広
払拭
上
本
。José Valim
力
Elixir
。
。
。
著
Programming Elixir
人
単
一早
Dave
見抜
解説書
力
、
、自
情熱的
、彼
並行
疲
Erlang 関
疑念 、Dave
先導
Erlang 仮
本
知
新
情熱
人
詰
、
視点 与
。
ä 力武 健次
ACM Erlang Workshop 2011 実行委員長
関数型言語
Elixir
。解
問題
。関数型言語
簡潔
問題
部品
。一般
傾向
半
完成
魅力
著書
Dave Thomas
組
合
名
、
世界
劣
。優
魅力 堪能
問題
表
解
大
問題
表現
解
美点
加
、強力
並
。
Ruby
本書
記述力
。
関数型言語
言語
、Ruby
伝
強力
関数型言語
。Elixir
行処理
、
、
現
容易
魅力
表現
情熱
語
口
轟
立役者
Elixir
素晴
練習問題
通
分
読者
Elixir
。
ä 酒匂 寛
・翻訳家(『
IT
参加
RubyKaigi2013
指向入門』
際、基調講演
一
、並列処理 興味 持
彼 作
José Valim
私
言語
)
Ruby
面白 内容
興味 持 始
Elixir
並行
。
。
Dave Thomas 書
英語 書籍
知 、英語 全 得
Elixir
知
考 、
購入
英語 Programming Elixir
。平易 文章 、読 進
楽
優
構成 、Elixir 単
Ruby 似 構文 持 並列処理 強
言
Elixir
意
私
、
語
知
信頼
笹田耕一、鳥井 雪両氏
喜
大
祝
助
。
翻訳
。
ä 北村 大助 a.k.a
v
、
本 、私 (一方的 )
多
方
届
Elixir(日本語版)
vi
開発
背景
求
過去
時代
私自身
変化
、新
。
環境 当
並行分散実行 対
一人
José Valim
José
「新言語 考
楽
新
前
要求 高
解答
」
Rails
柔軟性
考
昨今、
。Rails
、
。Ruby 文法
Elixir、言語設計者
実
推薦
。
Elixir
文法 関
相談 受
Erlang 並列分散性能 結
Elixir 作
想像
。
ä
Ruby 作者
出会
Elixir
、2013 年 1 月頃
記憶
。Elixir
活動 末、Erlang Factory SF Bay Area 2014
対面
Thomas
動
。
熱気 、地球 裏側
伝
Rails
、Erlang/OTP
敷居
手応
享受
、
。Dave
、英語圏
、José
、私
想
確信
実現
成就
Dave
活
掴
。
José
下
私 、
Elixir
Erlang
、
Elixir
、日本
惚
、José Valim
Elixir
多
、
教科書
、地球
。
言
裏側
込
願
利便性
Programming
日本
本書
。
ä 高橋 敬祐
Shinjuku.ex 共同主宰、 The Gluster Community Advisory Board Member
地
Elixir 作者
変化 、私
、私
心
20 年
書 方 、
奪
限
。
領域
叶
解放
作業
永遠
確保
、必要
。
解放
、
時
入
、
書
確保
、
換
要
。
構造
一部
重
確保
。当時、
、
管理
解放
速
CPU
必要
現象
。CPU
速
備
起
数
最大限引
、手作業
。
言語
、同
増
。
出
。
。
、新
、
意味
衝突
利用
、
。今 、
性能
既
普段使
、代
多
使
、今
書
方
直
。
実際、
書
。
間
互
足
引
、
張
引
仕事
不意
私
Erlang
、
探求
起
同期処理
折
次
、
、複数
同
破壊
私
、骨
換
、4
、
自分
行
。
、手
言語
同期
用
入
込
、間違
阻害
学
。私
書
技術
、自分
過
学
思
。
恋
、
伴
、小
動作
落
並行
。
上
、
互
通信
、
上 異
透過的 扱 、分散
、私
必要
間
構築
、
Erlang
交換 、VM
完璧
環境
物足
作
生
関数
。
。日常的 作
機能、
、
、支援
Elixir
、
。
、同
、Elixir
起
、
。
仮想
途上
性能低下
書
書
方
、新
読
可能性
数年間、
悟
、確実
対
合
性能
状態
。
利用
領域
、
Erlang 仮想
業
当時
込
別
、致命的
今
。
応
、
間違
、
知
実現
影響
。
前、
、道理
前書
欲
。
無
必要性
。
実践的
vii
。関数型
基礎
価
Elixir 作者
viii
値
置
前書
、
開発者
根幹
。
書
関数
関数
、開発者 古
喜
、私
。
適用
変換
同期 仕組
、
他
必要性
大
最後
変換
減
提供
関数
応
生成
、
。
。Elixir
、
言語
。
指向
書
代
。
、開発者 力 与
扱
、
良
観
。
、
同
足
解
変更
必要
以上
扱
、
、
、新
Elixir
管理
並行性
。
言語
考
Elixir
開発者
、Elixir
放 、並行
。並行性
、
解放
点
生産性
、Elixir
必須
多
仕組
、
、
備
気
。
、20 歳
Erlang VM
。
実現
支
仮想
、
書
VM
挑戦
準備 整
迎
仮想
力
、頑強 、並行性 持 、分散可能
開発
方
変
、
。Elixir
Erlang
時代
。
2014 年 10 月
José Valim, Elixir 作者
、
(正当化
私
言語
。
私
Ruby
言語
思
大好
出会
(分
離
十分
15 年 過
続
。
。恋 落
奥深
動
。
動
、
。
、同 気持
前 出会
。
、
。本
施
新
、
本
魅力的
書
始
、私
、
抱
不満
何
私
見
、
言
従
飾
人
示
。
Corey
言
、
、初
私
危険人物
教
方法
本
踏 込 、
本*1
、短
。Elixir
Ruby
見
見直
同
Elixir
。
書
、私
。
第一歩
望
、
詳細
OTP
。
、
力
気
示
、一番
、
関数、
羅列
。読者
人
伝道師
刺激的
文法、
、私
、
足
美
部分
思想
埋
、楽
思
、通称
本。
ix
贈
資料
。
。
Programming Ruby(Dave Thomas、Andrew Hunt 著、2000 年出版)
描
、
。
一度 900
。私
。他
。私
本 書
、
在
込
雑談
。
偉大
代
、
月前、Corey Haines
概念
。私
、今
、
理由
数
、関数
*1
同
自分
。
Elixir
気持
何
。Ruby
私
間
趣味 )。
comp.lang.misc(
。
興味
実装
紹介
、恋 落
説明
、
、孤独
。私
) 熱烈 読者 、
、
探
大好
1998 年
両親 聞
理由
試
試 )
。表紙
(正当化
x
試 )
謝辞
私
恋
落
二
言語
賢 、
作者
、共通点
人々
nice
、
二
、素晴
捧
。彼
年月
特徴
、
楽
18
作
次元
。
人物
。
本
対
全員
、
素晴
感
、
。José Valim、Elixir
達
月 与
、Elixir
成熟
見
執筆
、彼 大
仕事
全体
始動
興味
再
費
感謝
、
。
、
。
対話
Corey Haines
楽
夕
、私
感謝
知的
興味深
影響
洞察力
、
案
相談役
与
。
版
読者
。
神
加
。彼
彼
、文字通
、積極的
何百
改善
提
。
一礼
本
送
、彼
。
原稿整理編集
、
務
間違
加護
対
数
Chad Fowler
、感謝
Candace Cunningham
草稿
、信
恵
、
使
間違
。Corey、君
、
、初期
私
Jessica Kerr、Anthony Eden、
上
火
喜
。
Bruce Tate
大
Elixir
、
。何百
文法
指摘
。彼女
。
、索引作
Potomac
、
光
仕事
。
、(他
Susannah Pfalzer
全体
Furlow
最後
私
。私
全員
示
、率直
文章
、初
申
仕上
。
。
思
本
彼女
意見
誠実
付
経験
分
同様
Bookshelf
、健全
代弁者
。
人間
合
。
仕事
素晴
文章
取
)
Janet
編集者
本
経験 、Lynn Beighley
上
、
想定
段違
誤
書
、私
系統立
良
。
。
2014 年 10 月
Dave Thomas
、
目次
Elixir 作者
前書
vii
(正当化
第1章
1.1
1.2
1.3
1.4
1.5
1.6
第I部
試
)
ix
赤
1
変換
Elixir
Elixir
. . .
実行 . . . . . . . .
本 読
.
練習問題 . . . . . . . . . .
Think Different(ly) . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
伝統的
11
第2章
2.1
2.2
2.3
2.4
2.5
第3章
3.1
3.2
3.3
3.4
第4章
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
1
4
4
9
10
10
13
代入:
考
代入
、私
考
代入
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
不変
既知
. . . . . . . . . . . . . . . . .
不変性 性能
影響 . . . . . . . . . . . . . . . . . . .
不変
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
複雑
. . . . . . . . . . .
_(
) 値 無視
.
変数 束縛 (
中 )一度
.
等号記号 別 見方 . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
不変性
13
14
16
16
17
19
(
Elixir 基礎
組 込
型 .
値型 . . . . . .
型. . .
型
.
.
.
.
. . . . . .
名前、
変数
基礎 終
)不変
知
19
20
21
22
23
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
、慣習、演算子
.
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
xi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
24
26
26
28
30
32
34
xii
目次
第5章
5.1
5.2
5.3
5.4
5.5
無名関数
35
関数
. . . . . . .
. . . . .
関数 関数 返
. .
関数 引数
渡
. . . . . . .
関数
. . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . . .
処理 . . .
使
構築 . .
map 関数 作成 . . . . . . . . . . . . . .
再帰中 値 保持 . . . . . . . . . . . . .
複雑
. . . . . . .
実践 List
. . . . . . . . . . .
仲良
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
一
関数、複数
第6章
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
6.12
名前付
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
出
. . . . .
. . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
、
、構造体
、
. . . . .
. . . . . . . . . . .
.
更新 . . . . . . .
構造体 . . . . . . . . . . .
.
.
.
.
.
入 子
辞書構造体 .
. . . . . . . . . . . .
力
45
46
47
49
51
54
54
55
58
59
60
60
63
、
大
36
37
39
41
44
45
再帰
第8章
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
.
.
.
.
.
関数
. . . . . .
関数
. . . . .
関数呼 出
. .
節 . . . . . . . . . . . . . . .
. . . . . . .
関数 . . . . . . . . . .
素晴
演算子 |> . . . . .
. . . . . . . . . . . . . .
属性 . . . . . . . . . .
名前:Elixir、Erlang、
Erlang
関数 呼
見
. . . . . . .
第7章
.
.
.
.
.
大
誘惑
77
使
.
.
.
.
.
.
.
.
.
.
.
.
.
.
伴
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
63
65
66
67
68
71
75
75
.
.
.
.
.
.
.
.
77
78
78
79
81
82
83
86
87
xiii
第9章
寄
道:型
何
第 10 章
10.1
10.2
10.3
10.4
10.5
?
89
処理―――Enum
Enum―――
Stream
91
処理 . . . . . . . . . . . . . . . . . . .
92
95
Collectable
. . . . . . . . . . . . . . . . . . . . . . . 102
内包表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
神業
訣別 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
―――遅延列挙 . . . . . . . . . . . . . . . . . . . . . .
第 11 章 文字列
107
文字列
107
110
110
113
114
118
120
11.1
11.2
11.3
11.4
11.5
11.6
11.7
. . . . . . . . . . . . . . . . . . . . . . . . . . .
「文字列」
名前 . . . . . . . . . . . . . . . . . . . . . . .
囲
文字列―
―
―文字
. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文字列
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
見慣
、
奇妙
. . . . . . . . . . . . . . . . . . . . . .
第 12 章 制御
12.1
12.2
12.3
12.4
12.5
12.6
121
if unless .
cond . . . . . .
case . . . . . .
例外 発生 . . .
.
.
.
.
.
.
.
.
例外 使
少
努力
、大
第 13 章
13.1
13.2
13.3
13.4
13.5
13.6
13.7
13.8
13.9
13.10
13.11
13.12
13.13
13.14
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
成果 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
構成
129
: GitHub
: mix
使
変換:
121
122
124
126
126
127
取得 . . . . . . . . . . . . . 129
Issues
新
作
. . . . . . . . . 130
解析 . . . . . . . . . . . . . . . . . . . . . 133
: 基本的
変換:GitHub
:
書
. . . . . . . . . . . . . . . . . . 134
取得 . . . . . . . . . . . . . . . . . . . . . . 136
使
.
.
変換:
.
変換:最初
.
変換:
.
:実行可能
作成 .
:
追加 . . . . . . .
:
. . . . . .
変換:
:
. .
.
並 替
. .
n個 取 出 .
整形 . . . .
加工
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
生成 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
137
142
145
146
147
149
151
153
156
xiv
目次
変換
13.15
第 II 部
並行
159
第 14 章 複数
14.1
14.2
14.3
14.4
14.5
14.6
14.7
第 15 章
15.1
15.2
15.3
15.4
. . . . . . . . . . . . . . . . . 157
使
161
. . . . . . . . . . . .
. . . . . . . . .
死
. . . . . . . . . . . .
Parallel Map―――Erlang “Hello, World”
. . . . . . . . . . . .
Agents―――難問 . . . . . . . . . . . . . .
考
. . . . . . . . . . . . .
――
―分散
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
要
名前付
. .
名前付 .
I/O、PID、
. .
分散 基本 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
183
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
第 16 章 OTP:
16.1
16.2
16.3
16.4
16.5
定義 . . . . . . . . . . . . . . . . . . . . . . 193
. . . . . . . .
.
名前 付
.
整理 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
信頼
. . . . . . . . . . . . . . . . . . . . . 209
. . . . . . . . . . . . . . . . . . 217
第 18 章 OTP:
19.1
194
204
205
206
209
17.1
17.2
第 19 章
183
186
190
192
193
OTP
OTP
GenServer
第 17 章 OTP:
18.1
18.2
18.3
18.4
18.5
18.6
18.7
162
167
171
175
176
180
181
219
伝統的
. . . . . . .
仕様
. . . . . . . . . . . . .
Sequence
OTP
.
信頼性 基盤 . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
EXRM―――Elixir
. . . . . . . . .
OTP 大
、信
大
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
219
220
220
223
224
224
232
233
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
xv
19.2
19.3
19.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
、
GenServer ? . . . . . . . 239
大
第 III 部
高度
Elixir
第 20 章
20.1
20.2
20.3
20.4
20.5
20.6
20.7
20.8
20.9
評価
:
総
use
―――
付録 A
A.1
A.2
A.3
A.4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
243
244
247
251
253
254
254
255
255
257
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
関数
257
259
260
263
265
定義 . . . . . . . . . . . . . . . . . . . . . . . . . . 265
実装 . . . . . . . . . . . . . . . . . . . . . . . . . . 266
利用可能
型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
構造体 . . . . . . . . . . . . . . . . . . . . . . . . . 268
組
込
第 23 章
23.1
23.2
23.3
.
.
.
.
.
.
.
.
.
use
. . . . . . . . . . . . . . . .
__using__ . . . . . . . . . . . .
――
―関数呼 出
.
使 . . . . . . . . . . . . . . . .
use
第 22 章
22.1
22.2
22.3
22.4
22.5
22.6
243
if 文 実装 . . . . . . . . . . . . . . . . .
注入
. . . . . . . . .
表現 利用
. . . . . . . .
値 注入
利用 . .
健全 . . . . . . . . . . . . . . . .
片 走
他 方法 . . . . . . . .
演算子 . . . . . . . . . . . . . . .
深掘
. . . . . . . . . . . . . . . .
深掘 . . . . . . . . . . . . .
第 21 章
21.1
21.2
21.3
21.4
241
. . . . . . . . . . . . . . . . . . . . . . . . . 269
. . . . . . . . . . . . . . . . . . 276
機能
自前
複数
楽
書
277
. . . . . . . . . . . . . . . . . . . . . . . . . 277
. . . . . . . . . 280
! . . . . . . . . . . . . . . . . . . . . . . 284
例外:raise、try、catch、throw
例外 起
. . . . . . . . . . . .
catch、exit、throw . . . . . . . . .
独自 例外 定義 . . . . . . . . . .
今
付録 無視
. .
285
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
285
287
288
289
xvi
付録 B
目次
型仕様
型
291
型仕様
使
B.1
B.2
B.3
B.4
B.5
型
定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Dialyzer
利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
付録 C
参考文献
301
付録 D
D.1
D.2
D.3
索引
型
. . . . . . . . . . . . . . . . . . . . . . 291
新
指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
関数
型仕様 . . . . . . . . . . . . . . . . . . . . 295
日本語版
寄
303
Elixir 作者
原著者
訳者
. . . . . . . . . . . . . . . . . . . . . . . . . . . 303
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
309
第1章
赤
言語 Elixir
、不変的
状態
並行性
用
関数
、整然
。
、業務
Erlang VM 上 動作
、今
。
時間
、
頭
絞
必要
無
頑健
、一体
奪
、
文法
、高性能
、分散可能
持
、
意味
、
。
考
耐
、
?
難
、
心配
環境
一貫性
。
。
中
守
、
、
一番大事
方 考
、
別
。
変換
1.1
指向
観点
考
状態
世界
慣
持
階層構造 考 出
、問題
費
書
。
呼
出
状態
基
、
状態
現実
化
)
。私
自分自身
更新
。
定義
状態 暗黙的
、
。
別
各
抱
世界
。現実
(
、実際
世界
、抽象的
、真
隠蔽 。
階層構造
階層構造
仕事 済
、
、
。目的 、
世界
、
組
。
、考
他
。
定義
朝 市井 科学者 、
、
呼 出 、
、
王様
舞
、入
。
同
使
振
化
時間
時間 、
渡
、
。
。開発者
蝶 分類 作 出
状態
来
多
、状態 維持
。
例
今
、
空
、文章
、私
、
入
HTTP
隠蔽
読
形
本
変換
入
形
、中身
変換
。
。変換
1
。
変換
。
内容
。
第1章 赤
2
変換
、小
Unix
組
、焦点 合
、
、
出力
変換
合
哲学
、
慣
、次
組 合
親
。
(
人間)
入力
利用
形式
結果
。
哲学
信
柔軟
、
Unix
。
一
作者
、
素晴
思
、他
可能性
、
、高
利点
。
書
、
組
何倍
持
、
並列
。
合
。
信頼性
、一
他
再利用性
方法
。
小
簡単
実行
。
。例
、
$ grep Elixir *.pml | wc -l
wc(
grep
)
出力
了
、出力
生成
遅
感
消費
用意
関数
、一
各要素
関数
適用
、
換 、別々
、Elixir
pmap
一
関数
結果
実行
実行
。wc
、答
、grep
終
。
味
。
同時
grep
先
返
。今
関数
受
。
細
取
持
、
……
各要素
気
変
。
▶ spawn/pmap1.exs
defmodule Parallel do
def pmap(collection, func) do
collection
|> Enum.map(&(Task.async(fn -> func.(&1) end)))
|> Enum.map(&Task.await/1)
end
end
関数 使
、1
数
1000
平方
得
。
result = Parallel.pmap 1..1000, &(&1 * &1)
、
、1,000 個
起動
使
意味
、
自分
、私
。
無
。
書
、
本
。
半
上
変換
1.1
関数
3
変換器
問題
Elixir
代
解
方
、Unix
、関数
。関数
小
柔軟性 高
。
望
。驚
、
父親世代
渡
、退屈
古
数百万
簡単
焦点
、関数
受
同様
並列
合
。
、関数同士
形
、
走
。Elixir
、単純
機構
走
、
数百台
章
相互運用
、
、重要 単純化 方法
、彼
何 言
感
返
0.7071...
含
。三角関数
考 方 、関数
。 π4
例
sin
。HTML
関数
値
受
取
。
受 取 、完全
HTML
。
、
多
。Elixir 開発
本 読 進
。
、名前付
生成
話
。
「
扱
。
」
分
位置
可能性
寄
「変換」
、関数 入力 出力 変換
中心
間
。
。一台
、必要悪
者
、
備
話
。Bruce Tate
際
力
代償
、忘
。
知
去
苛立
。
、
自分
直感
新参者
間違
。
感
。
個人的
、
楽
一
一夜
。
指向
学
、関数
朝飯前
。
、
。問題
、気
書
。繰
、
方
何度
使
小
方法
使
世界
、
、仕事
書
(
。
wc
指向
終
、
観点
、
面白
認
)。
grep
責任
考
始
、変化
。
、
考
、
思
考
返
異
、驚
。
第1章 赤
4
1.2 Elixir
本
、少
使
Elixir 1.2
前提
。最新
、http://elixir-lang.org/install.html
Elixir
見
。
今、
実行
1.3 Elixir
本
。
、
示 。
$ echo Hello, World
Hello, World
、
$
(
、
入力
違
出力
表記
iex―――
)
。
内容
本
続
、
。
Elixir
成功
Elixir
始
確認
、
。
Elixir
、iex
入力
。
$ iex
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:4:4] [async-threads:10]
[hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (x.y.z) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
(
目
違
、
番号
出
iex
。一行
長
続
書
、Elixir
式
。
例
。
)
入力
入力
、結果
、iex
、追加行 入力
表示
確認
省略記号(...)
。
iex(1)> 3 + 4
7
iex(2)> String.reverse "madamimadam"
"madamimadam"
iex(3)> 5 *
...(3)> 6
30
iex(4)>
中
例
iex
数字
数字
、有効
省略
終了
。一番簡単
q Return 入力
式
実行
増
。以降、
。
方法
方
二
、 Ctrl - C 。
、
2 回入力
、 Ctrl - G 後
1.3 Elixir
実行
5
IEx
関数
iex
、
得
。h
入力(
)
。
iex> h
IEx.Helpers
Welcome to Interactive Elixir. You are currently seeing the documentation for
the module IEx.Helpers which provides many helpers to make Elixir’s shell more
joyful to work with.
This message was triggered by invoking the helper h(), usually referred to as
h/0 (since it expects 0 arguments).
You can use the h function to invoke the documentation for any Elixir module or
function:
┃ h Enum
┃ h Enum.map
┃ h Enum.reverse/1
You can also use the i function to introspect any value you have in the shell:
┃ i "hello"
There are many other helpers available:
• b/1
-- prints callbacks info and docs for a given module
• c/2
-- compiles a file at the given path
• cd/1
-- changes the current directory
• clear/0
-- clears the screen
• flush/0
-- flushes all messages sent to the shell
• h/0
-- prints this help message
• h/1
-- prints help for the given module, function or macro
• i/1
-- prints information about the given data type
• import_file/1 -- evaluates the given file in the shell’s context
• l/1
-- loads the given module’s beam code
• ls/0
-- lists the contents of the current directory
• ls/1
-- lists the contents of the specified directory
• pid/3
-- creates a PID with the 3 integer arguments passed
• pwd/0
-- prints the current working directory
• r/1
-- recompiles and reloads the given module’s source file
• respawn/0
-- respawns the current shell
• s/1
-- prints spec information
• t/1
-- prints type information
• v/0
-- retrieves the last value from the history
• v/1
-- retrieves the nth value from the history
Help for all of those functions can be consulted directly from the command line
using the h helper itself. Try:
┃ h(v/0)
To learn more about IEx as a whole, just type h(IEx).
関数
関数 渡 引数
数
、一番便利
内
個々
、
(/)
後
h
。引数
渡
関数
例
、
、IO
。
、Elixir
表示
有効
見
数字
。
(
書
、
確認
一般的
、
出
、h(IO)
、
。
)。
I/O 機能 取 扱 。
h IO 入力
。
iex
6
第1章 赤
iex> h IO
iex> h(IO)
#
Functions handling IO.
Many functions in this module expects an IO device as argument. An IO device
must be a PID or an atom representing a process. For convenience, Elixir
provides :stdio and :stderr as shortcuts to Erlang’s :standard_io and
:standard_error....
本
形 使
、
puts 関数 使 。
IO
、
文字列
出力
。
関数
見
、一番単純
。
iex> h IO.puts
def puts(device \\ group_leader(), item)
Writes the argument to the device, similarly to write
but adds a new line at the end. The argument is expected
to be a chardata.
一
参考
i
。
、値
情報 表示
。
iex> i 123
Term
123
Data type
Integer
Reference modules
Integer
iex> i "cat"
Term
"cat"
Data type
BitString
Byte size
3
Description
This is a string: a UTF-8 encoded binary. It’s printed surrounded by
"double quotes" because all UTF-8 codepoints in it are printable.
Raw representation
<<99, 97, 116>>
Reference modules
String, :binary
iex> i %{ name: "Dave", likes: "Elixir" }
Term
%{likes: "Elixir", name: "Dave"}
Data type
Map
Reference modules
Map
iex> i Map
Term
Map
Data type
1.3 Elixir
実行
7
Atom
Module bytecode
/Users/dave/Play/elixir/bin/../lib/elixir/ebin/Elixir.Map.beam
Source
/Users/dave/Play/elixir/lib/elixir/lib/map.ex
Version
[136119987195443140315307232506105292657]
Compile time
2015-12-29 16:33:20
Compile options
[:debug_info]
Description
Use h(Map) to access its documentation.
Call Map.module_info() to access metadata.
Raw representation
:"Elixir.Map"
Reference modules
Module, Atom
。
iex
実行
全体
、
、
実行中
。例
、私
。
Elixir
iex
設定
価結果 明
iex
色 表示
好
。
調
評
、
。
iex> h IEx.configure
def configure(options)
Configures IEx.
The supported options are: :colors, :inspect, :default_prompt, :alive_prompt
and :history_size.
Colors
A keyword list that encapsulates all color settings used by the shell. See
documentation for the IO.ANSI module for the list of supported colors and
attributes.
The value is a keyword list. List of supported keys:
•
•
•
•
•
•
•
•
:enabled
:eval_result
:eval_info
:eval_error
:stack_app
:stack_info
:ls_directory
:ls_device
-
boolean value that allows for switching the coloring on and off
color for an expression’s resulting value
... various informational messages
... error messages
... the app in stack traces
... the remaining info in stack traces
... for directory entries (ls helper)
... device entries (ls helper)
. . .
、
。
.iex.exs
作 、次 内容 書
第1章 赤
8
IEx.configure colors: [ eval_result: [ :cyan, :bright ] ]
見 目
iex
[33m
力
入
(
)、多分
。
、出
ANSI
場合、
化
無効化
。
IEx.configure colors: [enabled: false]
Elixir
.iex.exs
書
書
飽
。
実行
1行
iex
始
、
。Elixir
張子
。慣習
意図
一般的
、.ex
、.ex
。片
実上、
言語
.exs
近
。事
。Elixir
、
書
拡張子
。
.exs
拡
.exs
実行
解釈、実行
拡張子
書
、
.ex
済
置
必要
。
古典的
最初
書
作
hello.exs
。作 業
移
、
。
▶ intro/hello.exs
IO.puts "Hello, World!"
例
。
、
本
中
前
表示
、
名
示
。ebook
名
Bookshelf
示
場合
。
*1
本
、
、Pragmatic
*2
可
(_ ) 書
。.ex 拡
、
能 。
名前 小文字
張子
形式
実行
捨
、.exs
意図
作
*1
。私
、.exs 拡張子
使
、実行
”Hello World”
例 、
使
。
。
http://pragprog.com/titles/elixir12
*2 [訳注]https://pragprog.com/titles/elixir12/source_code
同
、
本 読
1.4
実行
elixir
9
。
$ elixir hello.exs
Hello, World!
中
iex
、c
使
実行
。
$ iex
iex> c "hello.exs"
Hello, World!
[]
iex>
実行
c
数
返
値
。
名前
)
。
c
import_file
使
、iex
)
本
本
内
報
上
疑問
、Elixir
使
行
下
。冒険心
書
。
、
、2
網羅
。
問
、十分
持
。読
書
、答
持
見
。
、Elixir
Elixir
若
参加
。
。
貢献
。
*4
、
*3 *4 。
起
*3
情
通
。疑問
検索
加
参加 検討
今
慣習
。
終
、
本
分
思
、適切
与
疑問 対
変数 、iex
読
、Elixir
、適切
、
。
人
(
。
一行
場合、
利用
代
c関
[]
場合、
、独立
。
1.4
(出力 続
含
http://forums.pragprog.com/forums/elixir12
https://groups.google.com/forum/?fromgroups#!forum/elixir-lang-talk
十
第1章
10
赤
1.5 練習問題
本
、練習問題
。ebook
直接
。
解答
最初
見
紙
本
見
場合
場合
答
、各練習問題
、読者
別
。
、
*5
練習問題
。
1.6 Think Different(ly)
本
、考
方
変
本
言
本
•
•
•
•
•
•
•
指向
複雑
並行性
、代入
、
受
入
高
数学的
必要
。
必要
言語
魔法
一
。
方法
。
。
。
言
。
、
分
Elixir
学
。
。
http://forums.pragprog.com/forums/322
、
思
)。
、
、今
新
忘
。
(
、私
。
、始
物
薬
、
、楽
添
楽
名前
。
。
、
方
。
、if 文、
資源
、単
仕事
薬
方法
、
必
違
*5
唯一
基礎
書
開
、
、
関数
魔法
、人
。
、Elixir
Elixir
。
、
考
広
方
視点
、
与
心
第I部
伝統的
Elixir
語
高
並列性
信頼性
持
書
言
。
並列
素晴
伝統的 、逐次
、言語
素晴
、Elixir
慣習
言語
書 方 扱 、次
探
。
、
。
Elixir
強力
第2章
章 扱
•
•
•
:
変数 値 束縛
構造化
)
無視
_(
前 章
、Elixir
始
違 考 方 生
、
。
説明
、多
基礎
Elixir
脳
始
一 、
代入
2.1 代入:
私 考
固
、
。
。
考
代入
代入
試
(思 出
始
取 扱
、
、
。
iex
。iex>
入力
Elixir
、結果
Elixir
使
実行
、iex
表示
)
。
iex> a = 1
1
iex> a + 3
4
、
代入
a
、次
行
a
、Elixir
等
呼
言
。
「
結果、4
、
。
辺
見
足
3
間違
。Elixir
、表明(assertion)
方法
見
、成功
。1
変数
、等号(=)
代入
」
。
。Elixir
。Elixir
等号
左辺 右
演算子
。
場合、左辺 変数 、右辺 整数
束縛
言
。
、
。
。
、
少
iex> a = 1
1
iex> 1 = a
1
iex> 2 = a
13
深掘
Elixir
「単
、変数 a
代入
。
1
」
第2章
14
** (MatchError) no match of right hand side value: 1
2 行目
、1 = a
変数 a
、最初
見
。
行
、右側
、3 行目
成功
同
値
。
思
成功
変数
、
行
、左辺
Elixir
設定
2
代入
変数
値
自身
同
2 = 1
。
、等号
左側
。
、a
。
。失敗
、
。
1
。
2 = a
。右辺
一
、
値
、
変更
置
換
、
起
。
複雑
2.2
最初 、予備知識
値
文法 。Elixir
、角括弧([])
見
、
作
区切
。
。
[ "Humperdinck", "Buttercup", "Fezzik" ]
[ "milk", "butter", [ "iocane", 12 ] ]
演算子
戻
。
iex> list = [ 1, 2, 3 ]
[1, 2, 3]
、Elixir
他 例 試
変数 list
[1, 2, 3]
束縛
。
。
iex> list = [1, 2, 3]
[1, 2, 3]
iex> [a, b, c ] = list
[1, 2, 3]
iex> a
1
iex> b
2
iex> c
3
Elixir
、左辺
、右辺
右辺
三
値
値
同
方法
値
、両辺
同
値
値
例 見
。
、値
、
自身
中
値
対応
同
項
含
対応
構造
持
、
、
。
、
。
。
変数
(左辺)
、値(右辺)
項
三
、変数
呼
。
内
。左辺
。
Elixir
、対応
探
。
内
変数
Fly UP