函数式编程-愚见

第一次接触函数式是从学scheme(lisp的一种)开始。而我产生学lisp的兴趣,是因为读了一篇名为《如何成为一名黑客》的译文(原文《How To Become A Hacker》)。最初认为scheme是由一些奇奇怪怪的括号、运算符组成。不过随着了解到的变多,才开始明白它编程范式的思想。不过后来不再继续学lisp。首先lisp实际应用较少,其次学习了它基本的范式思想并应用已够了。不过如果让我去做理论研究,我可以考虑再深入学习 = =。

图书馆见Oreilly的《函数式编程思维》,觉得封面一如既往的有趣,打开看看觉得不错。遂借回去看。这本书讲解语言主要是jvm类的语言,如java8.

书中明确提出了 函数式编程的“三板斧”:

1 filter : 筛选,获得数据集的特定子集

2 map : 映射,将集合、列表等转换成新的集合、列表等

3 catamophism :这里它描述不是很清楚,我理解是对输入的序列逐个操作(如累加),然后输出一个结果。如python中的reduce()

讲得很好,个人感觉这“三板斧”是函数式编程的精髓之一。实际应用中用得较多的也是这三板斧。函数式中还有些思想很优秀,比如尽量避免使用状态(状态会导致副作用,避免使用状态是函数式思想中强调执行结果而非过程的表现之一)、闭包、lazy evaluation。

lazy evaluation(惰性赋值),如当一个变量被使用到才应该被计算。过程式(如 C)可能在未使用时也需要先声明。

简单举个尽量避免中间状态的例子

```python

def f1(a,b):

   c = 0

   c = a if a>b else b

   return c

def f2(a,b):

   return a if a>b else b

```

f2就未使用c这一中间状态,函数更清晰明了。

总的说来,个人认为,函数式编程思想应该取其精华去其糟粕。比如过分使用函数式会增添不必要的麻烦。像一句话说的那样“我以为lisp是屠龙技,结果屠的却是自己”。现在已不必纠结编程范式的选择,因为现下多范式语言 不少,关键还是编程者要对语言进行高效合理地驾驭。

你可能感兴趣的:(函数式编程-愚见)