您的位置:首页 > 编程语言

函数式编程(F#)个人随感

2011-11-08 16:07 288 查看
函数是编程早就有了,不是只有F#。但是F#让我真正的了解和使用了函数式编程。

记得在GE的时候就深刻的感觉到,一家大的公司对技术的发展是举足轻重的。当然这是题外话了。

以前都是当作茶余饭后的随便看看,但是最近自己亲自用了一下,还是发现一些认识上的惯性误区。

随感随写,不断更新。

1、个人认为函数式编程(FOP),其实就是两个内容:数据和过程。

虽然二者都统一在一个let定义下,但是实际上二者是对立统一的。

这一点跟面向对象编程OOP不同。OOP也是将二者对立统一,但是有对象这一概念,将二者包起来了。

函数式编程则不同,二者区分就很明显。

一个函数一旦定义,就一直可以使用,而不需要什么初始化,这就是个“过程”而已。

不仅如此,匹配match,管道|>,<|,以及组合<<,>>使得这些过程能够链接起来,看上去就像流动的河流一样,让数据流动,很清晰。

而OOP让程序看上去更像个自动机,WPF 数据绑定就是一个经典。

正是因为强调“过程”这一概念,函数是编程在多核应用上很有优势。

2、函数内部能够定义函数。

OOP可不行!

3、变量还是分引用和值两个类型。

这是dotnet经典类型了。

引用类型的用ref、:=、!关键字

值类型的用<-

4、C#的委托要用到F#里要做转换。

5、建议初学者参数和返回类型都写全,不要让编译器自动推理。

否则经常不知道自己错在哪里。

6、LOP没有命令语言,比如break、continue、return、goto

LOP处理的数据都是块状的,比如vector、matrix、list、seq、数组等等。

所以个人认为LOP所使用的内存应该比用其他语言写的程序大很多。

7、LOP确实适合写算法(程序逻辑)。

以前在稿纸上都只能用流程图来写算法,修改算法,因为C++、C#的代码一些写一大堆,什么大括号,函数定义,烦死了。

F#就不一样了,最近几个流程都是用F#在稿纸上写的,很清晰。基本上写完了,就是最终的Code。以前即使用伪代码写的流程,到VS里用C++、C#写,要处理一下。

8

match Cross (p1.ToPoint2d()) (p2.ToPoint2d()) (hd.ToPoint2d()) (tl.Head.ToPoint2d()) with
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: