33

听说你想成为一名函数式编程工程师(第一部分)

 5 years ago
source link: https://www.oschina.net/translate/so-you-want-to-be-a-functional-programmer-part-1?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

迈出理解函数式编程思想的第一步是最重要的,同时也许是最难的。关于这一点,仁者见仁智者见智。

学车

当我们第一次碰车,我们痛苦并努力着,看起来很简单的操作自己上手的时候就变得比自己想象的难得多。尽管用父母的车经过多次练习,不把周围的路跑熟是不敢上高速路冒险的。但是经过不断练习和一些父母宁愿忘记的“心跳时刻”后,我们最终还是拿到了自己的驾照。

有了我们的驾照, 只要有可能, 我们就会把车开出来。每次旅行, 我们都变得越来越好, 信心也增强了。后来有一天, 我们不得不开别人的车, 否则我们的车终于放弃了幽灵, 我们不得不买了一辆新的。

第一次在不同的车底开车是什么感觉?这就像第一次开车一样吗?连近在咫尺都没有。第一次, 都是那么的陌生。在那之前我们一直在车里, 但只是作为乘客。这次我们坐在驾驶座上。包含所有控件的那个。

但当我们驾驶第二辆车的时候, 我们只是问自己几个简单的问题, 比如, 钥匙去哪里了, 灯在哪里, 你怎么用转向灯, 怎么调整侧镜.

在那之后,航行非常顺利。 但与第一次相比,为什么这次这么容易?

那是因为这辆新车非常像旧车。 它拥有汽车所需的所有基本功能,而且它们几乎都在同一个地方。

有些东西的实现方式不同,可能还有一些额外的功能,但我们第一次开车甚至第二次都没有使用它们。 最终,我们学到了所有的新功能。 至少我们关心的是那些。

学习编程语言和学车类似。第一次是非常困难的,但一旦你掌握了一门语言,后面学习其他的编程语言就会变得很容易。

当你第一次开始学习第二种语言时,你会问这样的问题:“我怎么创建模块?你怎么查找数组?什么是子字符串函数的参数?”

你有信心可以学习驾驭这种新语言,因为它会让你想起你的旧语言,或许还有一些新的东西可以让你的生活更轻松。

你的第一个宇宙飞船

无论你一生中开过一辆车还是几十辆车,想象一下你即将驾驶一艘宇宙飞船。

如果你要驾驶宇宙飞船,你不会指望你的驾驶能力对你有多大帮助。

你在开始训练的时候,会期望在太空中有非常不同的东西,而且飞行这个装置和在地面上驾驶是非常不同的。

物理上没有改变,只是你在同一个宇宙中导航的方式变了。

学习函数式编程亦是如此。你会预想所有的事情都会变得非常不同,并且你所知道的编程知识也不会相互转换。

编程就是思考的过程,而函数式编程将教你以不同的方式思考。甚至,你可能永远不会回到原先的思维方式。

忘掉你所知道的一切

人们喜欢说这句话,还是有点道理的。 学习函数式编程就像是从头开始。 虽不尽然,但确实有效。函数式编程中有很多与其他范畴相似的概念,但如果你打算必须 重新学习所有东西 ,这是最好的选择。

从正确的角度看,便会得到正确的预期;有了正确的预期,即使事情艰难之时也不会放弃。

作为程序员,你曾经做过的各种各样的事情,而现在使用函数式编程你什么也做不了。

就像,在汽车里,你习惯于倒车来离开车道。但是在宇宙飞船里,没有后退操作。现在你可能会想: “什么?没有后退?我怎么能在没有后退的情况下驾驶啊?!”

然而,事实证明,宇宙飞船能够在三维空间中操纵,因此你并不需要倒车操作。一旦你理解这一点,便不会再想念“倒车”了。事实上,在某天你会反过来想汽车的限制程度。

学习函数式编程需要一定的时间,请耐心点。

那么就让我们退出命令式编程的冷酷世界,轻轻地进入函数编程的温泉。

在这篇由多个部分组成的文章中,我们将介绍一些函数式编程概念,这些概念将在您学习第一种函数式语言之前对您有所帮助。或者,如果你已经尝试过了,这将有助于完善你的理解。

请不要着急。从这一点开始,花点时间阅读并理解代码示例。你甚至可以在每节课结束后停止阅读,让你的想法深入理解。然后再回来完成

最重要的是你要理解。

Purity

当函数式程序员谈到Purity时,他们指的是纯函数(Pure Functions)。

纯函数是非常简单的函数。它们仅对输入参数进行操作。

这是Javascript中的一个纯函数的示例:

var z = 10;  
function add(x, y) {  
    return x + y;  
}

注意 add 函数不会修改 z 变量。它不会从z中读取数据,也不会向z写入数据。它仅读取x和y,其输入值,并返回二者相加起来的结果。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK