新書推薦:
《
560种野菜野果鉴别与食用手册
》
售價:HK$
67.1
《
中国官僚政治研究(一部洞悉中国政治制度演变的经典之作)
》
售價:HK$
62.7
《
锂电储能产品设计及案例详解
》
售價:HK$
110.9
《
首辅养成手册(全三册)(张晚意、任敏主演古装剧《锦绣安宁》原著小说)
》
售價:HK$
121.0
《
清洁
》
售價:HK$
65.0
《
组队:超级个体时代的协作方式
》
售價:HK$
77.3
《
第十三位陪审员
》
售價:HK$
53.8
《
微观经济学(第三版)【2024诺贝尔经济学奖获奖者作品】
》
售價:HK$
155.7
|
編輯推薦: |
学习函数式编程的入门好书用一种更优雅、更高效的方式开发高性能的并发软件
|
內容簡介: |
本书作者就是 15 年前编写了 Programming Ruby,将 Ruby 带入大众视野的 Dave Thomas。这一次他延续了一贯的写作风格,以一个拥有面向对象的开发经历但并未接触过函数式编程的开发者的角度切入,循序渐进地带领读者进入 Elixir 的奇妙世界。通过一步步的实验探索,引导读者逐步跳出已有的编程思维模式,以全新的函数式编程方式来思考及寻找解决实际问题的办法。然而本书并不像 Programming Ruby 那样面面俱到,而是给读者讲述基本的 Elixir 语法和编程思想,同时提供许多有用的资源,启发读者继续深入探索。这也是学习一门新语言的乐趣所在。 如果你对函数式编程有兴趣,或者你正在苦苦寻求一种高效的并发编程的方法,Elixir可以作为入门之选,值得一试。
|
關於作者: |
杜万,毕业于同济大学,就职于 Coding.NET,目前负责 WebIDE 项目和 CodeInsight 项目的架构和研发。从事了近10年以 Java 语言为主的软件开发工作,热衷于整合框架和开发工具,关注交互设计,喜欢写技术博客http:codelife.me。
黄明信,毕业于岭南师范学院,就职于 Coding.NET,主要负责后台应用服务的研发。喜欢折腾机器和编程领域的各种玩意儿,专注于软件开发效率的提升和代码表达能力的优化。典型的射手座,兴趣广泛,但只为代码而活。
|
目錄:
|
第 1章 接受现实
编程时应该关注数据转换
借助管道来组合转换
函数是数据转换器
安装 Elixir
运行 Elixir
iex—交互式 Elixir
编译和运行
对阅读本书的建议
练习
换一种方式思考
第一部分 常规编程
第 2章 模式匹配
赋值:并非如你所料
更复杂的匹配
轮到你了
用_(下画线)忽略匹配值
每次匹配变量仅绑定一次
轮到你了
从另一个角度来看等号第 3章 不可变性
你已经拥有了(一些)不可变数据
不可变的数据才是已知的
不可变性对性能的影响
复制数据
垃圾回收用不可变数据编写程序
第 4章 Elixir基础
内置类型
值类型
整数
浮点数
原子
区间
正则表达式
系统类型
PID和端口
引用
收集类型
元组
列表
散列表
二进制型
命名、源文件、约定、运算符和其他
真值
运算符
小结
第 5章 匿名函数
函数和模式匹配
轮到你了
一个函数,多个函数体
编写更长的代码
轮到你了
能返回函数的函数
记住原始环境的函数 参数化函数
轮到你了
将函数作为参数来传递
& 运算符
轮到你了
函数是核心
第 6章 模块与命名函数
编译模块
函数体是代码块
轮到你了
函数调用与模式匹配
轮到你了
哨兵子句
哨兵子句的限制
默认参数
轮到你了
私有函数
|> ——美妙的管道运算符
模块
模块指令
import指令
alias 指令
require 指令
模块属性
模块名:Elixir、Erlang和原子类型
调用 Erlang的库函数
寻找函数库
轮到你了
第 7章 列表与递归
头部和尾部
使用头部和尾部来处理列表
iex如何显示列表
使用头部和尾部来构造列表
创建映射函数 在递归过程中跟踪值
轮到你了 生成求和函数
轮到你了
更复杂的列表模式
列表的列表
轮到你了
List 模块实战
与列表友好相处
第 8章 字典:散列表、散列字典、关键字列表、集合与结构体
如何在散列表、散列字典和关键字列表之间做选择
字典
模式匹配和更新散列表
模式匹配不能绑定键
更新散列表
散列表与结构体
访问结构体的另一种方式
嵌套字典结构
嵌套访问器和非结构体
动态(运行时)嵌套访问器
集合
能力越大,诱惑越大
第9章 番外篇—类型是什么
第 10章 处理收集—Enum与 Stream
Enum——处理收集
关于排序的说明
轮到你了
Stream——延迟处理的枚举类型
流是可组合的枚举器
无限流
自定义流
流在实际中的应用
Collectable 协议
推导式
推导式也可以处理二进制位
作用域与推导式
推导式的返回值
轮到你了 感动过往的神
第 11章 字符串与二进制型
字符串字面量 Heredoc 魔术符
“字符串”这个名称
单引号字符串 ——字符编码列表 轮到你了
二进制型
双引号字符串是二进制型
字符串与 Elixir库
轮到你了
二进制型与模式匹配
用二进制型来处理字符串
轮到你了
熟悉却又陌生
第 12章控制流
if 与 unless
Cond
Case
抛出异常
包含异常的设计
四两拨千斤
轮到你了
第 13章组织项目
项目:从 GitHub获取 issue
我们的代码将如何工作
任务:用 mix来创建我们的新项目
创建项目树
转换:解析命令行
进阶:编写一些基本的测试
轮到你了
转换:从 GitHub获取数据
任务:使用外部库
寻找库
为项目添加库
轮到你了
回到转换
转换:转换响应内容
不在 hex里的依赖项
应用程序配置
转换:为数据排序
转换:取前 n条
轮到你了
转换:格式化表格
任务:创建命令行可执行程序
任务:添加日志
任务:测试代码注释
任务:创建项目文档
使用转换数据的方法来编写代码
轮到你了
第二部分 并发编程
第 14章运用多进程
简单的进程
在进程间发送消息
处理多条消息
递归、循环与栈
进程开销
轮到你了
进程何时结束
关联两个进程
监控进程
轮到你了
并行 map——Erlang版本的“ Hello, World”
轮到你了
斐波那契数服务器
任务调度器
轮到你了
代理——一个难题
以进程的方式来思考
第 15章 节点——分布式服务的关键
命名节点
轮到你了
节点、cookie与安全
给你的进程命名
何时给进程命名
轮到你了
IO、PID与节点
轮到你了
节点是分布式的基础
第 16章OTP:服务器
一些 OTP的定义
OTP 服务器
状态和单个服务器
我们的第一个 OTP服务器
轮到你了
单向调用
跟踪服务器的执行情况
轮到你了 GenServer回调函数
给进程命名
整理接口
轮到你了
第 17章 OTP:应用程序监视器
应用程序监视器与工作进程
轮到你了
管理重启前后的进程状态
应用程序监视器是可靠性的核心
轮到你了
第 18章OTP:应用程序
这不是传统的应用程序
应用程序规范文件
将 Sequence程序转变为 OTP应用程序
关于应用参数的更多信息
监视是可靠性的基础
轮到你了 热代码交换
OTP很大——难以置信的大
轮到你了
第 19章任务与代理
任务
任务与监视
代理
更大的例子
使其分布式运行
使用代理与任务,还是 GenServer
第三部分 更高级的 Elixir
第 20章宏与代码求值
实现 if语句
宏注入代码
装载次序 quote函数
将内部表示作为代码使用
unquote函数
展开列表——unquote_splicing
回到我们的 myif宏
轮到你了
使用绑定来注入值
宏是卫生的
执行代码片段的其他方法
宏与运算符
深入研究
更进一步 轮到你了
第 21章 连接多个模块:行为与 use
行为
定义行为
声明行为
use 与 __using__
放到一起——跟踪方法调用
使用 use 轮到你了
第22章协议 ——多态函数
定义协议
实现协议
可用的类型
轮到你了
协议和结构体
内置协议: Access
内置协议: Enumerable
内置协议: StringChars
内置协议: Inspect
协议就是多态
轮到你了
第 23章更酷的玩意儿
自定义魔术符
获取选项
轮到你了
多应用的 umbrella项目
创建 umbrella项目
创建子项目 LineSigil项目
Evaluator项目
连接子项目
别急!还有更多炫酷的玩意儿!
附录 A异常:raise与 try,catch与 throw
附录 B类型规范与类型检查
|
內容試閱:
|
推荐序最开始杜万说请我为他翻译的Elixir 的新书写一篇序,我一头雾水,因为完全没有听说过“Elixir”这个词,我甚至到现在都不知道这个单词应该怎么读,虽然我已经读完了全书。是的,刚才那个句子很长,不好读,然而它的逻辑是正确的。这跟我初步了解Elixir 的感觉差不多,不好理解,但逻辑是正确的。虽然我现在很少写代码了,但是作为一个曾经写了十几年代码的人,本书讲述的内容,特别是Elixir 的思想很是让我震撼。我必须承认我并没有彻底理解这本书,很多的细节没有时间去详细实践,但就我不深的理解,已经体会到了这种基于进程的编程思想,以及它带来的变革。在我中学开始学习编程的时候,用的是 Pascal。我知道数据结构、算法,我会做题,然而我对软件工程一无所知,不知道如何编写一个完整的应用。后来大学的时候学习Java,才知道 Pascal 是一种面向过程的语言,Java 是面向对象的语言。然而我花了很久才理解了什么叫作“对象”,以及什么叫作面向对象的编程。我清晰地记得 Java 课的第一次作业是编写一个计算器程序。整个程序我只有一个 Java 文件,所有的代码都在这个文件中,活生生用 Java 语言写了一个 Pascal 程序。编程思想的转变是困难的。我在读这本书的时候,再一次感受到了编程思想的转变,从面向对象到面向进程。原本在 Java 中非常复杂的多线程、分布式处理方式在 Elixir 中变得无比简单,这也是 Elixir 在现代 IT 系统中的价值:最大化CPU 的处理能力。大概一年前,我有一个朋友说他最近在疯狂地研究 Erlang(一种跟 Elixir 接近的语言),他打算说服公司的领导用 Erlang 重做一个系统。当时我觉得他疯了,我对 Erlang不了解,只知道这是一种很奇怪、很小众的编程语言,现在我可以理解那个朋友当时的想法了,他一定有一种脑洞大开的感觉!不论你现在是做 APP 开发,传统 Web 开发,还是在中国大红大紫的微信开发,都应该读一读此书,它一定会让你眼前一亮。没有最好的编程语言,只有最合适的编程语言。随着硬件的不断发展,一定会有很多不同于过去常见的编程思想和语言出现,以适应最新的硬件。也许本书的内容不能在你的工作中用到,但这不重要,重要的是思想的碰撞带来的愉悦,以及碰撞后留下的那些思考。张海龙,Coding CEO2016 年1 月19 日·深圳译者序还记得第一次得知 Elixir 是 Coding 的冒泡1上 mingshun2 的一句牢骚:“不要咖啡,不要大象,不要蟒蛇,不要红宝石,只要万金油”。这句开发者的唠叨,吸引了我的注意。显然咖啡表示 Java,蟒蛇表示 Python,红宝石表示 Ruby,大象呢?“最好的编程语言,PHP”,一个同事提示道。Google 搜索了一下,果然 PHP 的 logo 是一头大象。“那么万金油呢?”我追问道。同事也一副“什么鬼”的表情,凑过来一起Google 了一番,才知道万金油是 Erlang 虚拟机上的一门语言,相当于 Scala 之于 Java 虚拟机,英文名字叫Elixir。这是一门全新的语言,有一些新奇的特性,于我小有触动。后来从 mingshun 那里了解到Programming Elixir 写得不错,国内还没有翻译版本。于是我就开始张罗和 mingshun 合作翻译。先找博文视点的编辑许艳与外方谈妥了翻译版权,试译两章,然后很快签了合同开始动工。初稿阶段比较顺利,我们把每一章编写成独立 Markdown 文件,还写了一个脚本,把Markdown 格式自动转换成 Word 格式。我们把译稿放在 Coding 的代码仓库里,每译完一章就提交一个合并请求给另一个 Peer Review。排版以后就没那么顺畅了,新发现的问题标注在PDF 文件上,一个人先审,另一个人候着,不容易并行执行。之前了解过原书出版社 Pragmatic Bookshelf 有一套工具可以由源文件生成多种格式的目标文件。有了这套工具写书就像写代码,一次编写,无须排版。写了封邮件向 Pragmatic Bookshelf 出版社问询,对方称暂时没有对译者开放工具。此时深感工具之重要,对于创作和翻译而言,工具就是生产力。写代码也一样,良好的工具链可以极大地提高生产效率,这也是 Coding 推出的一系列云端开发工具的价值所在。在翻译的过程中得到了很多人的帮助,首先要感谢合译者黄明信,是你把 Elixir 这么美妙的语言带给了我,感谢你一次次在翻译过程中帮我解惑,帮我字斟句酌;感谢责任编辑许艳,感谢你在整个过程的付出,感谢你细致地审稿,从一次次反馈中感受到了你编辑工作的严谨;感谢同事杨臻,在一些拿捏不准的地方,帮我提了许多建议;感谢所有帮助过我的人。杜万2015 年 1 月 3 日于上海遇见 Elixir 可能是一种缘分吧!我比较喜欢管它叫“万金油”,但并不代表它就是万能的,毕竟世界上没有完美的东西。Elixir 继承了 Erlang 在构建分布式系统上的优点,并通过添加众多现代编程语言的特性来提升语言的表达能力。如果说 Erlang 是并发编程的领路者,那么 Elixir 就是你一路跑来在沿途看到的美好风景,它会让你的编码旅程更精彩。翻译这本书是为了让更多人能了解 Elixir。无论你是否会在项目中使用它,都值得你去“玩”一下,体验一下新思维。现代编程语言的实用性不局限于它的运行效率,还体现在语言的表达能力及对基础设施的抽象能力上。在我看来,写代码如同文学创作,不仅要把你的想法准确地传达给机器,更重要的是让读代码的人有种清风扑面而来的快感。这本书与Programming Ruby 是同一位作者,他的写作风格是技术作者中少有的,措辞生动,引经据典,颇富文采,奈何中西文化有别,本人又才疏学浅,未能将原作者的想法传神地表达出来。希望各位读者多多包涵。非常感谢在翻译过程帮助过我的同事们,特别是本书的另一位译者,杜万。由于是第一次翻译,很多工作都不懂如何开展,加上又是个急性子,经常会为些小事情发牢骚。感谢他对我的包容,每当想放弃的时候他都在一旁鼓励。同时还要感谢出版社的工作人员,正因为他们在整个过程中的辛劳付出,本书才得以顺利出版。黄明信2015 年 1 月 4 日于湛江
|
|