在五分钟快速了解您的Func Prog!

我记得长台;他们来到了讯连网络员面前


st 功能规划是通过软件开发扫描的大范例偏移。

面向对象的编码时代终于绘制到不可避免和可耻的近距离。我们可以 - 我们必须! - 全部携手并跳跃到一个勇敢的新世界,在没有露丝的情况下切除邋state和粗心的副作用。

现在,每个程序,从谦逊的Android小程序到强大的发动机污染 - 测试 - 伪造主义,必须脱掉荒谬的陷阱和笨拙的客观复杂性,而且浮动优雅地向下向下闪亮的新功能管道 - 这是一个,真正的代码渠道代码计算天堂。

不幸的是,为了全心全意地加入这个文化大革命,它是必要的(是的,是的,我知道)OO程序员丢弃他们所有的感伤异议并采用新的一种正确的方式。

所以,兄弟编码器,关闭了你的Facebook应用程序,并抛开你的推文。我准备了一个关键的FP原则的简要摘要,即使您也可以在几分钟内吸收和内侧摘要。

然后,当红色的功能术语来敲门时,我们两个可以将你的大型精心设计的阶层层次结构框架进入街道,在共同篝火上烧毁它,同时脱落革命幸福的泪水。

选择武器

首次决定是要使用的编程语言。这是一个帮助的表。

凡好 cons
erlang 原始的实用FP语言真正通过它在现场的步骤。通过声誉如此强大,您可以在erlang程序运行的机器中更改磁盘,没有任何有害效果。或者切断整个东西,并将其放在一桶冰水中。 语法是不可理解的痛苦。
哈斯克尔 一片闪亮,优雅的AS-A-an-Snowflake,表现力的AS-DAME-MAGITE-SMITH语言,巨大的力量,没有肮脏的妥协。纯的。非常有影响力。它的功能非常巧妙的草莓味。 主要是CV装饰语言。代码通常是被钦佩而不是编译;这在技术上被称为“懒惰执行模型”。

此外,你不会理解它。

Scala. 与Java和底层JVM实现密切相关,这意味着它提供该平台的所有功能。 与Java和底层JVM实现密切相关,这意味着它提供该平台的所有功能。
F# 一个Microsoft .NET语言,具有ML的根。 在这里写下任何东西,因为你已经下定决心。你不是吗?
Clojure. JVM平台与PORTS到.NET和JavaScript。 它只是功能性服装的丽斯普,为天堂的缘故。这是,在我们八分之一过去八点的年度。那些讨厌的leispers永远不会停止吗?

标记我的话:下一站,Funcobol

javascript. 这是你最终使用的。 最具功能失调的功能语言。在所有众所周知的缺陷之上,扰乱普通原始编程的缺陷,它缺乏许多必须具有功能性Gewgaws。它的变量是可变的,其类型的孔是吲哚,它的“渴望”不适合,其模块是不可追溯的,尾部递归争夺,范围不可原谅,我将在那里停下来,“反驳”(姓名)还在银行中仍然存在,只是因为你善待我。

状态,纯度和功能方式

如您所知,功能规划运动由一个称为“类别理论”的数学学科的恐怖主义翼创立。因此,其章程和法规是由仔细衍生的证据和公理建立的,这是不合格的人来理解。

然而,以下Bluffer的指南不需要这样的纪律或理解;通过掠夺哈斯克尔书籍的亚马逊模板,匆匆忙忙地建造了。享受。

规则1: 您可以完全分配一次变量。此后的变量和值连接在一起,直到死亡使其部分。

理由: 这使得关于代码的原因更容易。

OO程序员对规则1的反应非常反应: 什么,你是在替代我的聚丙烯吗?我有一个可修改的状态在这里的利物浦大小。奇迹般有效。放手!

结果: 如果追求其清洁结束,这条规则 - 除了其他缺点 - 导致一个令人不安的混乱,几乎没有差不多的标识符,就像露营地在下雨的摇滚节后那样。

对Cognoscenti的观察: 实际规则1是:“您可以根据需要多次分配给局部变量, 只要你没有被抓住。 “我发现这种异端邪说,适当地被重现在P150 功能javascript.,所以我们去参加法院的辩护律师有一些东西。

规则2: 所有功能必须是“纯粹”,这意味着它们必须是金发和蓝眼睛,而不是触及任何外部状态。他们的行为仅由他们的争论管理。

理由: 这使得关于代码的原因更容易。

结果: 即使是FP putitans承认这一点使得这类事情的实施是I / O和随机数发生器“棘手”。但这不是它的一半。如果您不小心,即使具有最无名的貌似计划,您最终会在功能参数中传递世界。

我强烈推荐这种有趣的交换 散文序列 其中博主詹姆斯海牙设定了使用erlang重新实施旧拱廊最喜欢的Pac-Man。作为海牙的朋友的谨慎言论,这令人愤怒的是,因为在不使用字母“e”的情况下撰写小说。

观察: 为了释放晚泰姬陵,也许我们有点前进,这是一个实际规则。也许我们可以将其降级为长期的野心,然后在使命宣言的第四段中埋葬它。

规则3: 功能应该是 咖喱.

理由: 这使得关于代码的原因更容易。

背景: “咖喱”当然是以象征主义的奇怪的数学家Haskell Curry命名(似乎吸引了比他的同伴的公平份额超过了他的同事,他的同事迭代器和P.H.P博士意外的例外)。可以通过制造琐碎的功能来看待咖喱效果:

功能乘法(x,y){return x * y;}

然后在没有第二个参数的情况下调用它。当然,在现实生活中,您可以获得Not-A号时间表:

乘以(1); // nan

乘以(2); // nan

乘以(3); // nan

但在虚构的,抱歉,诸如Haskell等功能语言中,您将传送新的,有点跛行的函数,每个函数都采用单个参数并乘以一个,两到三个。

像这样:

F1 =乘以(1); // f1(x)可用于乘以一个

doublefunc =乘以(2); // doublefunc(x)保存您编写'x * 2'

三倍=乘以(3); // tripler(x)回报......哦,你肯定得到这个想法

这是咖喱的魔力。

功能性的黑手党将您将这些Piffling,半叫,咀嚼和吐出的函数分配到几十个为此目的声明的新的单次变量,并使用它们来帮助更好地提高代码。

建议: 有JS图书馆将为您完成所有咖喱,例如, ramda.js.。或者,如果您更喜欢,您可以自己磨练。

但是,我们推荐懒惰(SIC)方法。当由一个FP警察挑选狼人违规时,要做的事情就是把一个人的头部到一边,表达了无辜的探究,并说:“但是真的很漂流吗?或者只是部分函数申请吗?“

这将触发非自愿解释反射,您将能够在单面讨论单仙函数的分析优势的片面讨论的封面下蠕动到安全。

金属人和游牧民族

规则4: 君士的诅咒。

历史: 诅咒首先是阐述的 Douglas Crocford The Json King,不少。他在阅读了许多博主解释的Monads和我们怀疑后推导出来, Catch-22..

nub: 如果你应该偶然发生一些事故来了解一个Monad是什么,你会同时失去向别人解释它的能力。

观察: Crockford自己发誓要克服诅咒。您可以通过查看50分钟的谈话来判断自己是否成功“金属人和加州。“

(执行摘要:没有。)

不完美的逻辑: 我可以做得比Crockford更好,因为有幸的是,因为它是一个Monadic Virgin,诅咒的前提是不适用的。

读者评论: Hmm.

规则5: FP大多以MONADS完成。 Monad是一个编程实体,定义了几个易于理解的属性。

理由: Monads让您更轻松地了解该代码。

进一步的读者评论: Get on with it.

规范的Monadic属性:

Monad Propert 1: 一个单一的像一个常见或园艺的变种,即它是一个物体缠绕在一起。除非你把手放在嘴里,否则可能不会告诉你它的价值是什么。想想一个无法给球的猎犬。

Monad Propertic 2:

金属人

。做()

。那()

。恼人的()

.CHAITE()

.call(东西)

。样(jquery); //糟糕的现代诗歌

Monad Propert 3: 那不是说 jquery. 是一个如图主甚至略微 mon。 HOH. 。 deffo出生的错误一面,jquery。那里 Comonads. live.

Monad Propert 4: 金属人很少抛出异常。相反,他们更愿意假装没有发生任何事情并通过 空的蒙片 在链条上。当您到达长时间计算结束时,这提高了惊喜水平,而不是一个很好的诊断堆栈跟踪或实际答案,您将计算出相当于嗝的计算科学。但是没关系。欣赏交付它的功能管道的光滑,消化流!

Monad Property 5: 因为它们非常重要,因此Monad名称前面是明确的文章。 清单Monad,I / O Monad,Continuation Monad,Monad可能 (一种罕见的变性Monad),和 yourthtodothewashingupup monad..

Monad Propert 6: MONADS是可组合的,可延展的和韧性的定义。没有,半mo,可能是镜片。或函数。或酸。

Monad Propert 7: 所有Monads都定义了一个名为(),绑定()函数的单位()函数,称为map()和称为...的类型构造函数

等一下。等一下。也许绑定()是一个不是函数的算法。我很确定。在我抬头时抓住马匹马上。

......我应该澄清这个bind()和map()与您可能熟悉的任何其他绑定()或映射()方法或函数无关,尽管它们的操作在某种意义上非常相似。

概括: 这是一个荣幸,很高兴能够为你清除所有这些。

最终读者的评论: 我的感激不可思议。

修订练习

  1. 区分第一,第二和第三类功能。提供例子。为什么既不聪明也不有趣地调用较低的阶级第二级功能'德斯蒙'功能?
  2. 你右边还是向右折叠?不要提供太多信息。啊。
  3. PointFree. 或者 无意义?
  4. 元组,一个monad,一条龙,鹅口疮组合器一起进入一个酒吧。展示接下来会发生什么,用图表。
  5. “使用 underscore.js. 或者 洛奇 是在FP中开始的一个很好的方法。“剧烈却贬低了这一情绪。

下一个: 如何简化鼠标的处理,而是通过无限长度阵列的组合将其视为单元格。我打赌你等不及了,你能吗? ®


咬住它的手©1998-2021