您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 函数式编程中文版.pdf
  所属分类: Web开发
  开发工具:
  文件大小: 2mb
  下载次数: 0
  上传时间: 2019-07-03
  提 供 者: mr_***
 详细说明:什么是函数式编程,相信有会有兴趣了解。纯函数有什么好处?什么是柯里化?这里有答案3 Introduction This is the Simplified Chinese translation of mostly-adequate-guide, thank Professor Franklin Risby for his great work 关于本书 这本书的主题是函数范式( functional paradigm),我们将使用 JavaScript这个世 界上最流行的函数式编程语言来讲逃这一主题。有人可能会觉得选择 JavaScript并 不明智,因为当前的主流观点认为它是一门命令式( mperative)的语言,并不适 合用来讲函数式。但我认为,这是学习函数式编程的最好方式,因为 你很有可能在日常工作中使用它 这让你有机会在实际的编程过程中学以致用,而不是在空闲时间用一门深奧的 函数式编程语言做一些玩具性质的项目。 ●你不必从头学起就能开始编写程序 在纯函数式编程语言中’你必须使用 monad才能打印变量或者读取DOM节 点。 JavaScript则简单得多,可以作弊走捷径’因为毕竟我们的目的是学写纯 函数式代码° JavaScript也更容易入门,因为它是一门混合范式的语言’你随 时可以在感觉吃力的时候回退到原有的编程习惯上去。 这门语言完全有能力书写高级的函数式代码 只需借助一到两个微型类库· JavaScript就能模拟 Scala或Hask础这类语言 的全部特性。虽然面向对象编程( object-oriented programing)主导着业界, 但很明显这种范式在 Java script里非常笨拙’用起来就像在高逸公路上露营或 者穿着橡胶套鞋跳踢踏舞一样。我们不得不到处使用bind以免this不 知不觉地变了’语言里没有类可以用(目前还没有),我们还发明了各种变通 方法来应对忘记调用new关键字后的怪异行为,私有成员只能通过闭包 ( closure)才能实现,等等。对大多数人来说,函数式编程看起来更加自然 以上说明’强类型的函数式语言毫无疑问将会成为本书所示范式的最佳试验场。 JavaScript是我们学习这种范式的一种手段,将它应用于什么地方则完全取决于你 自己。幸运的是’所有的接口都是数学的,因而也是普适的。最终你会发现你习惯 了 swift、 scala、 haske川和 purescript以及其他各种数学偏向的语言。 Gitbook(更好的阔读体验) Introduction 在线阅读 下载EPUB ·下载Mobi( Kindle) 目录 第1部分 第1章:我们在做什么? o介绍 O一个简单例子 第2章:一等公民的函数 o快速概览 o为何钟爱一等公民 第3章:纯函数的好处 o再次强调“纯” o副作用可能包括 o八年级数学 O追求“纯”的理由 o总结 ·第4章:柯里化(cury) 不可或缺的cury o不仅仅是双关语/咖喱 o总结 ·第5章:代码组合( compose) o函数饲养 o poIntTree o debug o范畴学 总结 ●第6章:示例应用 o声明式代码 o一个函数式的fckr o有原则的重构 总结 Introduction 第2部分 第7章: Hindley- Milner类型签名 o初识类型 o神秘的传奇故事 o缩小可能性范围 o自由定理 结 第8章:特百惠 o强大的容器 o第一个 functor o薛定谔的 Maybe o“纯”错误处理 o王老先生有作用 o异步任务 o一点理论 o总结 第9章: Monad o pointed functor o混合比喻 o chain函数 o理论 o总结 第10章: Applicative Functor o应用 applicative functor o瓶中之船 o协调与激励 lift o免费开瓶器 o定律 总结 未来计划 第1部分是基础知识。这是初版草稿’所以我会及时更正发现的的错误。欢迎 Introduction 提供帮助! ·第2部分讲遊类型类( type class),比如 functor和 monad,最后会讲到到 traversable o我希望能塞进来一些 monad transformer相关的知识,再写一个 纯函数的应用。 第3部分将开始游走于编程实践与学院学究之冋。我们将学习 comonad、f- algebra丶 free monad yoneda以及其他一些范畴学概念。 第1章:我们在做什么? 第1章:我们在做什么? 介绍 你好’我是 Franklin Risby教授·很高兴认识你。接下来我们将共度一段时光了, 因为我要教你一些函数式编程的知识。好了,关于我就介绍到这里,你怎么样?我 布你已经熟悉 JavaScript语言了,关于面向对象也有一点点的经验了,而且自认 为是一个合格的程序员。希犂你没有昆虫学博士学位也能找到并*一些臭虫 (bug 我并不假设你辶前有任何舀数式编程相关的知识——我们都知道假设的后果是什么 (译者注:此处原文是 we both know what happens when you assume",源自一 句名言" When you assume you make an ass of u and me”,意思是“让两人都难 堪”)。但我猜想你在使用可变状态( mutable state)、无限制副作用 ( unrestricted side effects)和无原则设计( unprincipled design)的过程中已经遇 到过一些麻烦。好了,介绍到此为止,我们进入正题 本章的目的是让你对函数式编程的目的有一个初步认识,对一个程序之所以是函数 式程序的原因有一定了解’要不然就会像无头苍蝇一样,不问青红息白地避免使用 对象——这等于是在做无用功。写代码需要遵循一定的原则’就像水流湍急的吋候 你需要天文罗盘来指引一样。 现在已经有一些通用的编程原则了’各种缩写词带领我们在编程的黑暗隧道里前 行:DRY(不要重复自己, don t repeat yourself),高内聚低耦合( loose coupling high cohesion), YAGNI(你不会用到它的· ya ain 't gonna need it) 最小意外原则( Principle of least surprise)单一贲任( single responsibility)等 等 我当然不会啰里八嗦地把这些年我听到的原则都列举出来,你知道重点就行。重点 是这些原则同样适用于函数式编程’只不过它们与本书的主题不十分相关。在我 深入主题之前’我想先通过本章給你这样一种感觉’即你在敲键盘的时候内心就能 强烈感受到的那种函数式的氛围。 个简单例子 第1章:我们在做什么? 我们从一个愚蠢的例子开始。下面是一个海鸥程序,鸟群合并则变成了一个更大的 鸟群’繁殖则増加了鸟群的数量’増加的数量就是它们繁殖岀来的海鸥的数量。注 意这个程序并不是面向对象的良好实践’它只是强调当前这种变量赋值方式的一些 弊端。 var Flock function(n)i this, seagulls = n; Flock. prototype conjoin function (other)i this seagulls + other seagulls; return this Flock. prototype breed function (other)i this seagulls this seagulls other seagulls; return thisi var flock_a new Flock(4) var flock_b= new Flock(2) var flock_c new Flock(o) var result flock_a conjoin(flock_c).breed(flock_b). conjoin(flo ck a breed(flock_b)). seagulls; //=>32 我相信没人会写这样糟糕透顶的程序。代码的内部可变状态井常难以追踪,而且 最终的答案还是错的!正确答案是16·但是因为f1ock_a在运算过程中永久 地改变了·所以得出了锆误的结釆。这是「T部门混乱的表现,非常粗暴的计算方 式 如杲你看不懂这个程序’没关系,我也看不懂。重点是状态和可变值井常难以追 踪’即便是在这么小的一个程序中也不例外。 我们试试另一种更函数式的写法 第1章:我们在做什么? var conjoin function(flock_x, flock_y)i return flock_x floc var breed function(flock_x, flock yi return flock_x flock var flock a= 4: var flock b=2 var flock=0 var result conjoin(breed(flock_b, conjoin(flock_a, flock_c)) breed(flock_a, flock_b)) //=>16 很好’这次我们得到了正确的答案’而且少写了很多代码。不过函数嵌套有点让人 费解..(我们会在第5章解决这个问题)。这种写法也更优雅’不过代码肯定是越 直白越好’所以如果我们再深入挖掘’看看这段代码究竟做了什么事,我们会发 现,它不过是在进行简单的加( ConJoin)和乘( breed)运算而已 代码中的两个函数除了函数名有些特殊’其他没有任何难以理解的地方。我们把它 们重命名一下,看看它们的真面目 var add function (x, y)t return x+ yji var multiply function(x, y)i return x *y ji var flock a=4 var flock b=2: var flock c= o var result add(multiply (flockb, add(flock_a, flock__c), multi py(f⊥ocka, flock b)); //=>16 这么一来’你会发现我们不过是在运用古人早已获得的知识
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: