F#支持3种编程范式:函数式(Functional Programming), 命令式(Imperative Programming)& 面向对象式(Object-oriented Programming)。函数式范式则是F#中最重要的,也是最能体现F#威力的一种方式。在很长一段时间,我以为函数式编程和命令式编程是一回事,以为在C里面写了一堆函数(方法),一步步调用那些方法,就是函数式的编程,呵呵。其实,函数式编程的思想是以数学的思想,像函数求解一样去编码,而不是一行行的代码告诉电脑如何做(命令式编程)。不过目前我对函数式编程也没有太多的体会,等后面再多看些了,有了更深的体会了,再补一片对函数式编程的理解的笔记吧。PS,在网上看到了篇07年左右微软的几个大牛的访谈记录,从里面摘抄了点内容,从这些话里,似乎对函数式编程的理解更进了一步,比如在C#里大放异彩的LINQ,就是对函数式编程的一种借鉴。
传统上,如果我们用“命令型语言”编程,我们的基本成份是“语句”。“语句”使用并且共享“状态”,从而导致不太好的“可组合性”。你不能拿着两段语句,然后简单地把它们粘合到一起,因为它们的全局状态不能很好地交互。这就导致“命令型语言”不能很好地组合到一起。如果你看看LINQ,就会发现我们已经更多地采用“函数型语言”的风格,所有的东西都基于表达式。
“表达式”从其定义来说就是可组合的。你如何创建一个新的表达式?你用小的表达式组合出一个大的表达式。
既然是函数式编程,那F#里的函数肯定有着与众(C#)不同之处。这篇开始就详细的记录下F#的函数的特点。
在开始之前,我们首先应该抛弃脑子里的面向对象编程的概念,什么类啊,继承啊统统的都忘掉,如果对函数式编程完全没概念,可以先想想小时候学习C语言的时候,main函数调用a方法,a调用b。。。然后返回,先简单的认为函数式编程就是一堆函数的调用,组合的编程方式。或者想想,小时候解题的时候,套用不同的公式,最后得到答案。。。
-
不可变性
-
函数也是类型
-
递归函数
-
运算符
-
函数的组合