Elixir简单直接的语法非常适合用来学习函数式编程。
本书循序渐进地讲解函数式编程的关键概念,包括递归函数、模式匹配、不可变值、显式数据转换、模块、高阶函数、多态函数、错误处理等,借助清晰明了的案例让读者在不知不觉中掌握函数式编程思想和Elixir语法。
理解函数式编程的三个关键概念:模式匹配、递归、流程控制。
学习在函数式编程中使用列表、元组、映射表等常用数据结构。
利用高阶函数改善程序的可读性。
借助流提高编程效率。
使用多态和协议处理各种类型的数据。
掌握错误处理。
函数式编程具有代码简洁、开发速度快、易理解、易维护、扩展性强的特点,在某些领域可以解决让命令式编程头痛的问题,具有广泛的应用场景和良好的发展前景。本书是函数式编程的零基础教程,以Elixir为例讲解函数式编程与命令式编程的区别,帮助读者掌握函数式编程的基本概念和思想(如不可变值、显式数据转换、模式匹配、递归函数、高阶函数、多态等),并避免新手常犯的错误。本书尤其适合对Elixir感兴趣且无函数式编程基础的读者入门学习。
自我的上一本译作《Elixir程序设计》出版已经过去了三年。Elixir也从1.2版本更新到了1.10版本。官方一直保持着每半年更新一个大版本的节奏。在这些更新版本中,有关语法的变化越来越少,针对库、工具链、使用体验、性能的更新越来越多,特别是1.9版本,José Valim声称Release是最后一个计划中的特性。我真为Elixir的日臻完善而感到高兴。
很多人把Elixir比作Erlang平台的Ruby。诚然,Elixir的作者和贡献者从Ruby身上借用了许多设计。Ruby的编程体验可以说是令人惊艳的,其动态、简洁、元编程都是Java、Golang、Python这些同时的编程语言所不具备的。当然,Ruby在性能和并发编程方面也有不足。Elixir选择将其基座造在BEAM(Erlang VM)之上,BEAM以9个9的可用性(31毫秒/年的宕机时间)而著称。就并发而言,Actor模型曾经是Erlang的优势之一,但今天Rust的Actix和Java的Vert.x性能测评甚至比Erlang还要好。Erlang的真正优势在于抢占式调度带来的低延时和软实时性。Elixir的设计目标是更高的可扩展性、更高的生产力,同时保持跟Erlang生态圈的兼容性。
Elixir的官方定义为:一种用于构建可伸缩、可维护应用的动态、函数式编程语言(Elixir is a dynamic, functional language designed for building scalable and maintainable applications.)。下面我们就来谈谈Elixir与众不同的地方。
相比于大家熟悉的面向对象编程(OOP),函数式编程(FP)更强调程序执行的结果而不是过程,它倡导利用若干简单的执行单元渐进地、逐层地完成运算,而不是设计一个复杂的执行过程。每个函数的执行结果只依赖于函数的参数,而不受其他数据的影响。严格的函数式语言要求函数必须无副作用。
前言 1
本书适合你吗 2
这本书里有什么 2
选择Elixir 3
安装Elixir 3
运行代码 3
在线资源 4
第1章 函数思想 5
1.1 为什么需要函数式编程 5
1.1.1 命令式语言的局限性 6
1.1.2 转向函数式编程 6
1.3 使用不可变数据 7
1.4 使用函数构建程序 9
1.4.1 明确地使用值 9
1.4.2 在参数中使用函数 11
1.4.3 值的转换 11
1.5 声明式编程 12
1.6 小结 14
第2章 使用变量和函数 15
2.1 表示值 15
2.2 执行代码并生成结果 17
2.2.1 创建逻辑表达式 19
2.3 变量值绑定 20
2.4 创建匿名函数 22
2.4.1 函数是一等公民 24
2.4.2 在不使用参数的情况下共享值 25
2.5 具名函数 29
2.5.1 Elixir的具名函数 29
2.5.2 创建模块和函数 30
2.5.3 导入具名函数 33
2.5.4 将具名函数作为值使用 34
......