1

像大多数人一样,我开始并且仍然做了很多命令式代码(主要是 Java、Ruby、Javascript)。

我从来都不是 OO 的忠实拥护者,要么是因为我从来没有正确理解它,要么是因为我不认为 OO。

通过 javascript,传递函数、闭包等,我第一次看到了 FP。从那时起,我就爱上了 FP。

最近,我对 Clojure(可能是 Scala)产生了兴趣,有朝一日甚至可能会尝试一下 Haskell。我喜欢我在函数式方法中看到的东西,但我如何看待函数式?在过去的 3-4 年里,我一直在做必要的事情,我的大脑在解决问题时倾向于认为是必要的。

我怎样才能忘记命令式风格(我需要吗?)并更多地思考功能?

4

2 回答 2

3

不,不要忘记命令式风格,因为你仍然需要它。甚至许多做得好的 FP 库在幕后看起来也有些必要。最好考虑将 FP 添加到您的工具和技术列表中,而不是使用一种技术或另一种技术。

现在,关于你如何学习 FP 风格?玩具项目 - 或您为自己使用而编写的实用项目。或者地狱,给自己写另一个博客 - 但有一个转折!如上所述,关键是练习。这样做时,请避免共享状态。在尽可能多的地方争取纯洁(即避免副作用)。使用闭包、模式匹配(如果语言支持)和 lambda 函数。将函数视为程序中的一流数据类型 - 将它们作为输入并将它们作为输出返回。清单还在继续,但如果您正在观察它们,您会一次又一次地看到相同的概念。

如果您觉得在这方面需要轻推,请使用鼓励FP 风格的工具(语言),例如 F# 或 Scala。

如果您觉得自己需要更多“严厉的爱”的帮助,请联系 Haskell :)

否则,请使用您选择的工具,并牢记 FP 概念(上文)。如果您决定走这条路,那么有一本名为Real-World Functional Programming的好书,它使用 F# 和 C# 来说明适用于“主要”FP 语言 (F#) 和“主要”OO 语言 C# 的技术。

于 2010-10-14T18:39:43.057 回答
1

去哈斯克尔。因为它是纯粹的,所以你被迫思考功能性。在 F# 或 Scala 中,您仍然可以编写非常命令式的代码。我强烈推荐 Graham Hutton 关于 Haskell 的书。

于 2010-12-23T00:22:28.230 回答