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


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.