Comments
Description
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 、対応 探 。 内 変数