主题

2021-02-05

"Elixir实用指南 "是由我们的CEO黑田撰写的一本书,已经由Impress发布。

在亚马逊购买

我不记得我第一次遇到Elixir是什么时候了,这种编程语言是本书的主题。 让我们模糊地说是在2010年代中期。在那之前的大约十年里,我完全使用Ruby on Rails(一种基于Ruby编程语言的网络开发框架,通常被称为 "Rails")。 我用Rails开发过网络应用,也写过解释Rails的书。

我甚至不清楚为什么我会对Elixir感兴趣。 我曾听说过一些传言,说有这样一种 "函数式编程语言",而且非常有趣。 我甚至对Elixir以外的函数式语言做了一些研究。 然而,我有一个先入为主的观念,认为它们受到研究人员和理论家的青睐,但并不实用,所以我不想认真对待它们。

然后,我迎来了一个转折点:在2010年代末,单页应用程序(SPA)在网络应用程序开发的世界中变得非常流行。 SPA是一个通用术语,指的是提供类似于桌面应用的UI/UX的网络应用。 使用JavaScript框架(React、Vue等)来支持SPA开发的做法迅速蔓延。 为了驾驭这一巨大的浪潮,我大力收集信息,反复试错。 在这个过程中,我发现了凤凰框架,一个基于Elixir的Web开发框架,俗称 "凤凰"。

随着研究的深入,我变得越来越兴奋;Phoenix似乎是我当时在SPA开发中所面临的各种问题的一个优雅解决方案。 Phoenix似乎是我当时在SPA开发中面临的许多问题的优雅解决方案,通过追求Elixir擅长的并发编程,我可以创建超越传统界限的创新网络服务。 我有一种预感,Phoenix将改变我们行业的游戏规则。

一旦我们真正建立了一个有一定规模的具体网络应用,我们发现Elixir是一种非常容易编写和实用的编程语言。 功能性编程语言的约束是所有的数据都是不可变的,这对开发来说不是一个障碍。 此外,Elixir没有所谓的面向对象编程(OOP)中的 "继承",但令人惊讶的是,这并不是一个令人沮丧的根源。

与Java、PHP、Python、Ruby等相比,Elixir的历史很短,不被大众所熟知。 然而,我预测Elixir将在2020年代迎来黄金时代。其原因是Elixir社区的热情。 Elixir生态系统正在迅速成熟,许多有才华的人和有影响力的公司都加入了这一行列。

现在,这本书是对Elixir的介绍。它尽可能详细地解释了 "变量 "和 "整数 "等基本概念,以便不仅为那些想尝试新语言的现有程序员,而且为编程初学者打开大门。此外,我们还包括许多具体的源代码和它们的执行结果。 特别是,我们试图详细解释不正确的源代码的例子以及执行时输出的警告和错误信息。 这是为了避免误导初学者,使他们不愿意学习。

本书分为两部分:第一部分和第二部分,这里是第一部分。第一部分的主要内容是模块、函数、数据类型和模式匹配。 第二部分包括结构、多态性、行为、元编程和并发编程。 第二部分将作为 "高级Elixir实用指南 "出版。

第一部分又分为五个部分。第一部分是对Elixir编程的基本概念的相当快速的介绍。 在这里了解Elixir独特的语言规范,包括数据类型、模块、函数、宏、模式匹配、管道操作符等等。 第二章将解释设置Elixir开发环境的程序。

在第二部分,我们将详细讨论模块和函数。我们还将讨论宏,但不会太深入。宏将在第二部分中涉及。 第三部分涉及Elixir数据结构。第三部分涉及Elixir数据结构,特别是列表(第12章)和地图(第14章)。

第四部分题为 "迷人的Elixir世界",重点是模式匹配,这种语言规范使Elixir缺乏继承性成为不争的事实。 这一部分涉及的其他有趣的话题包括 "理解性符号 "和 "还原函数"。

在第五部分,我们将做关于井字游戏主题的开发练习。前半部分是准备工作。 首先,我们将解释如何使用Elixir的测试框架ExUnit和Elixir的构建工具Mix。 接下来,我们将解释代理和GenServer这两个概念,作为练习的必要工具。 在第五部分的后半部分,我们将实际开发一个应用程序。在第五部分的后半部分,我们将实际开发应用程序,通过这个开发练习,读者将学到各种知识。 例如,如何以 "项目 "为单位组合多个模块进行开发,如何在终端与用户互动,如何在应用程序中保存数据,如何编写和运行测试,等等。

从第3章到第25章的每一章末尾都提供了练习题。 仅仅通过阅读一本书是很难学会一门编程语言的,所以我们鼓励你在不看书末附录中的答案的情况下挑战自己。

2020年11月
黒田 努

目录

  • 第一部分
    • 第1章 介绍
      • 1.1 什么是Elixir?
      • 1.2 Elixir和Erlang之间的关系
    • 第2章 构建一个Elixir开发环境
      • 2.1 创建一个Elixir容器
      • 2.2 如何使用Elixir容器
    • 第3章 Elixir基础知识(1)
      • 3.1 Elixir程序如何工作
      • 3.2 基本概念
      • 3.3 练习
    • 第4章 Elixir基础知识(2)
      • 4.1 数据类型
      • 4.2 数字
      • 4.3 原子
      • 4.4 字符串
      • 4.5 列表, 字符列表, 元組, 関連键字列表, 映射
      • 4.6 函数
      • 4.7 类型识别
      • 4.8 练习
    • 第5章 Elixir基础知识(3)
      • 5.1 变量和模式匹配
      • 5.2 函数、模块和宏
      • 5.3 练习
    • 第6章 Elixir基础知识(4)
      • 6.1 操作员
      • 6.2 文件系统和输入/输出
      • 6.3 if宏、for宏、Range结构
      • 6.4 练习
  • 第二部分
    • 第7章 模块
      • 7.1 定义一个模块
      • 7.2 模块别名
      • 7.3 模块属性
      • 7.4 练习
    • 第8章 函数(1)
      • 8.1 无名函数
      • 8.2 命名的函数
      • 8.3 函数和关键字列表
      • 8.4 练习
    • 第9章 函数(2)
      • 9.1 函数调用的分类和函数的可见性
      • 9.2 捕获操作符
      • 9.3 import
      • 9.4 练习
    • 第10章 宏程序基础知识和条件分支
      • 10.1 宏的介绍
      • 10.2 if 宏程序
      • 10.3 cond 宏指令
      • 10.4 练习
  • 第三部分
    • 第11章 原子
      • 11.1 什么是原子?
      • 11.2 与原子打交道的函数
      • 11.3 原子的作用
      • 11.4 练习
    • 第12章 列表
      • 12.1 创建一个列表
      • 12.2 使用列表
      • 12.3 将一个列表转换为另一个列表
      • 12.4 列表的数据结构
      • 12.5 头、尾和Cons运算符
      • 12.6 练习
    • 第13章 元组和关键字列表
      • 13.1 元组
      • 13.2 字符列表
      • 13.3 练习
    • 第14章 映射
      • 14.1 映射基础知识
      • 14.2 使用映射
      • 14.3 映射上的基本操作
      • 14.4 映射数据结构
      • 14.5 练习
    • 第15章 位串、二进制、字符串和字符列表
      • 15.1 位串
      • 15.2 二进制数据
      • 15.3 字符串(1)
      • 15.4 字符串(2)
      • 15.5 字符串的函数
      • 15.6 二进制文件的数据结构
      • 15.7 字符列表
      • 15.8 练习
  • 第四部分
    • 第16章 模式匹配
      • 16.1 什么是模式匹配?
      • 16.2 列表的模式匹配
      • 16.3 元組的模式匹配
      • 16.4 映射的模式匹配
      • 16.5 二进制字符串的模式匹配
      • 16.6 比特串的模式匹配
      • 16.7 pin操作符
      • 16.8 函数参数的模式匹配
      • 16.9 练习
    • 第17章 Enum 模块
      • 17.1 Enumerable
      • 17.2 将一个Enumerable的元素转换为具有相同数量元素的列表的函数
      • 17.3 将全部或部分Enumerable转换为列表并返回的函数
      • 17.4 返回属于一个Enumerable的单个元素的函数
      • 17.5 返回真/假值的函数
      • 17.6 其他函数
      • 17.7 练习
    • 第18章 for宏
      • 18.1 for宏的基础知识
      • 18.2 使用生成器和过滤器
      • 18.3 :into选项
      • 18.4 位串生成器
      • 18.5 练习
    • 第19章 case宏和with宏
      • 19.1 case宏的基本用法
      • 19.2 case宏的使用实例
      • 19.3 with宏
      • 19.4 练习
    • 第20章 带多条款的函数
      • 20.1 创建带有多条款的无名函数
      • 20.2 带有多条款的命名函数
      • 20.3 保护命名函数不受条款的影响
      • 20.4 练习
    • 第21章 reduce函数
      • 21.1 累积器
      • 21.2 reduce函数的使用实例
      • 21.3 练习
    • 第22章 错误处理
      • 22.1 异常
      • 22.2 抛出
      • 22.3 练习
  • 第五部分
    • 第23章 ExUnit
      • 23.1 ExUnit简介
      • 23.2 编写测试
      • 23.3 练习
    • 第24章 Mix
      • 24.1 Mix项目
      • 24.2 第一个实现
      • 24.3 扩展
      • 24.4 练习
    • 第25章 代理和GenServer
      • 25.1 代理人
      • 25.2 GenServer
      • 25.3 练习
    • 第26章 井字游戏(1)
      • 26.1 开发练习中创建应用程序的规范
      • 26.2 创建应用程序框架
      • 26.3 管理游戏状态的代理
      • 26.4 控制台
      • 26.5 定义游戏任务
    • 第27章 井字游戏(2)
      • 27.1 显示游戏状态
      • 27.2 管理回合
      • 27.3 更新网格
      • 27.4 刷新屏幕
    • Chapter 28 井字游戏(3)
      • 28.1 判断结果
      • 28.2 让计算机选择棋步
  • 附录A 练习题的答案
到主题列表