改变我的思维方式,为函数式编程做准备


9

从过程和OOP转换到编程的功能样式时,关于“这种新的思维方式”,我需要预先了解些什么?

您如何为在FP世界中潜水做准备,并使其成为首次潜水?

首先要学习和打基础的基础知识是什么?


2
恕我直言,这太笼统了。刚开始阅读!如今,大多数有关函数式编程的书籍和手册都是从问题的答案开始的。
devmiles.com 2012年

尝试一下,然后发布一个问题,如果您遇到问题
汤姆·斯奎尔斯

@弗拉基米尔·沃洛丁(Vladimir Volodin):很好,但这并不是每本书都必须的。您能推荐一些好的(最好是与语言无关的)吗?
JohnDoDo 2012年

你不必潜水。您可以尝试使用c#之类的OOP语言中的lambda表达式来平滑从OOP到FP的过渡。
TomCaps 2012年

4
我认为你倒退了。尝试使用函数式编程,您的思维方式将会改变。
凯文·克莱恩

Answers:



6

您将需要声明式思考,而不是程序上解决问题的“首先执行此操作,然后执行此操作,然后执行此...”的方法。理解递归可能是一个很好的起点,因为它是程序性和陈述性思维之间的最佳结合点。


4

您已经把马车放在马的前面。您不需要准备。只需选择一种看起来有趣的语言,找到一些文档,然后尝试即可。如果卡住,请停下来寻找答案。随着您的进步,您的思维方式将会改变。


3

FP基于lamdba演算。您需要知道这一点。这是一个很好的起点。功能就是一切。没有状态的概念(尽管您可以在更高层次上伪造它)。

在OOP中,

a = 1 a = a + 1

被接受。FP中并非如此。您只是不能为变量分配另一个值。如果您想长期学习FP,请学习Haskell。它是目前最纯的FP版本,它也很复杂(我刚刚开始学习它),但仍然值得学习。

函数式编程简介为您提供了有关FP的全面概述。

虽然有两个警告

  1. 如果您想学习FP的工作,那么那里没有太多职位空缺。程序和OOP仍然统治着就业市场。但是FP可以帮助您探索解决问题的新方法。
  2. FP编译器的运行速度并不快。由于FP更关心解决问题,因此不能指望C速度。但是,您仍然可以向Haskell中的编译器发出指令,以加快执行过程。折衷方案是您有很多时间专注于手头的程序,而不是消防程序。

8
“ FP是基于lamdba演算。您需要知道这一点。” 不,你没有。了解Lambda演算对于理解功能编程不是必需的,而了解Turing机器(或装配体)对于理解命令式编程则更为必要。
sepp2k 2012年

@ sepp2k为长期目标而擅长FP,我诚实地认为学习lambda演算是必要的。您可以不用lambda演算来学习它,但是学习它会使您在FP方面更好。
Ubermensch '02

2
FP确实在其状态中声明其状态通常是不可变的,也不确定我是否同意有关编译器运行缓慢的说法
jk。

@jk。当然,它们具有状态,但不是以OO方式(状态可以包含在函数中或作为匹配模式,并且可以更细微的方式包含)。不变的状态意味着您只有一个状态。这就是为什么函数应始终返回相同值的原因。关于编译器,我认为它们不能在纯速度方面与C / C ++相匹配,因为编译器会处理计算结果所需的步骤,而不是我们指定顺序。FP在降低开发人员成本和并行计算而非纯粹的CPU速度方面具有最大的优势。
Ubermensch'3

3

我尽力记住以下经文:

数据输入->转换数据->数据输出

要么

TransformData(数据输入)->数据输出


1
它应该是TransformData(DataIn)->
DataOut

:)作为一种口号,“数据输入,转换数据,数据输出”更容易说“转换数据,打开括号,数据输入,关闭括号,数据输出”,我只是在开玩笑,我同意你的看法。
Darknight '02

这只是一个友好的评论伙伴。感谢您的回复。
Ubermensch'2

我知道,我只是在和你开玩笑,没有冒犯的意思,事实上,我想我会更新我的马特拉。
Darknight '02

男人,您的技能非常强大。
Ubermensch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.