函数式编程(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
记得在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
相关文章推荐
- 个人随感
- 【个人随感】读《分享一些我的创业心得》有感
- 【个人随感】读《分享一些我的创业心得》有感
- 块和函数式编程(翻译+个人想法)
- 【个人随感】开博第一天
- 函数式编程个人感悟
- 【个人笔记重点,不作为参考】主题:JSX语法与函数式编程
- [个人推荐]函数式编程另类指南[zz]
- 【个人随感】IT毕业生
- IHttpHandle和IhttpModule个人学习备忘
- 算法导论(CLRS, 2nd) 个人答案 3.1
- Java加密算法(十二)——*.PFX(*.p12)&个人信息交换文件
- (待切,标记上)暑期个人赛--第九场--B
- 第二次个人作业
- 函数式编程初探
- 微信:小程序将对个人开放,与公众号增加玩法
- 机器学习任务的state-of-art之github及个人总结
- 如何开发一个具有个人特色的小型理财系统呢
- 个人新作品《云应用开发——Google App Engine & Google Web Toolkit入门指南》
- 个人笔记:linux nfs设置