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

函数是编程早就有了,不是只有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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值