转载网址:http://www.cnblogs.com/Hlia/archive/2013/04/20/3029701.html 个人认为,C#语言的某些设计并不非常适合函数式开发,比如它的类型推断并不是很近乎人意,我们知道C#还是主打面向对象的,不过这并不妨碍我们用C#来讨论函数式,至少可以借鉴函数式的一些思路来优化我们的代码. 我希望通过这篇文章让读者通过简单的例子,在短时间内掌握基本函数式编程方法,了解Action与Func类型的使用.同时我希望读者对C#泛型集合.Linq.lambda表…
函数式设计的核心与函数的应用以及函数如何作为算法的基本模块有关.利用局部套用技术可以把所有函数看成是函数类的成员,这些函数只有一个形参,有了局部套用,才有部分应用.部分应用是使函数模块化成为可能的两个技术之一,另一个是组合. C#函数式程序设计之参数的解耦 局部套用是一种转换技术,它把一个需要接收多个参数的函数转换为一系列函数,后者每次只接受一个参数并返回序列中的下一个函数.在这个函数链的末尾,所有的参数都可以使用,并允许原算法执行自己的操作. 考虑下面这个简单的函数,它使用了与C#2.0兼容的…
自3.5版本以来,.NET以及微软的.NET语言开始支持表达式树.它们为这些语言的某个特定子集提供了eval形式的求值功能.考虑下面这个简单的Lambda表达式: Func<int, int, int> add = (x, y) => x + y; 可以知道,上述代码最后生成一个局部函数.Lambda表达式是需要编译的代码.在C#编译器运行时,把匿名函数转换为IL代码.为了建立一个表达式树,需要对上述语法稍作修改: Expression<Func<int, int, int&…
如果一个程序设计语言能够用高阶函数解决问题,则意味着数据作用域问题已十分突出.当函数可以当成参数和返回值在函数之间进行传递时,编译器利用闭包扩展变量的作用域,以保证随时能得到所需要的数据. C#函数式程序设计之作用域 在C#中,变量的作用域是严格确定的.其本质是所有代码生存在类的方法中.所有变量只生存于声明它们的模块中或者之后的代码中.变量的值是可变的,一个变量越是公开,带来的问题就越严重.一般的原则是,变量的值最好保持不变,或者在最小的作用域内保存其值.一个纯函数最好只使用在自己的模块中定义的…
C#函数式程序设计之泛型(下)   每当使用泛型类型时,可以通过where字句对泛型添加约束: + 这个例子直观地声明了一个约束:类型T必须与ListItem<string>相匹配.泛型类型约束T:X表示T可以是X.X的派生对象或X的实现(假如X是一个接口).换言之,假如类型T的一个实例为t,则可以把它赋给一个变量:X x=t; 约束可以使用具体的类型,但是在这些情形下,类型不可以是密封的.有几个特殊的关键字可以取代或补充类型声明符.关键字class表示此类型必须是一个引用类型,而struct…
Intellij修改archetype Plugin配置 2014-03-16 09:26 by 破狼, 204 阅读, 0 评论,收藏, 编辑 Maven archetype plugin为我们提供了方便的创建 project功能,Archtype指我们项目的骨架,作为项目的脚手架. 如fornt end的yo之类.我们能够通过简单的一行控制台command line创建你所需要的项目结构: 1 2 3 4 5 6 mvn archetype:generate   -DarchetypeGro…
C#函数式程序设计之函数.委托和Lambda表达式 C#函数式程序设计之函数.委托和Lambda表达式   相信很多人都听说过函数式编程,提到函数式程序设计,脑海里涌现出来更多的是Lisp.Haskell等语言,而C#,似乎我们并不把它当成函数式语言,其实,函数式程序设计并不是只针对某个特定的程序设计语言,而C#,也正一步步使用函数式丰富自己的语言结构,帮助人们更好的实现期望的结果. 函数式程序设计 函数式程序设计把重点放在函数的应用上,函数式程序设计人员以函数为基本模块来建立新函数,这并不是说…
原文地址:Haskell学习-函数式编程初探   为什么要学习函数式编程?为什么要学习Haskell?   .net到前端,C#和JavaScript对我来说如果谈不上精通,最起码也算是到了非常熟悉的程度.这两门语言就像是我的盾牌和宝剑,给我保驾护航,开山劈石,伴随着我不断成长.同时C#和JavaScript它们本身也在不断地进化,不断出现越来越多方便的语法糖,但追根到底很多都是从函数式语言汲取的精华.比如高阶函数,lambada表达式,柯里化等.   于是从探险的角度,以好奇的心态开始学习函数…
前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了大量的时间,但切实将这些知识学习到了,而不再是囫囵吞枣似的,似懂非懂.接下来我会根据个人的学习体会,将这个阶段的知识大致从新整理一下,给大家提供参考,也当是自己对这个阶段的总结,准备投入到下一个阶段你的学习了. 先后顺序将以适合学习的顺序归纳总结. 初学java时应当了解到的一些基本知识 [知识向]…
有效地处理数据时当今程序设计语言和框架的一个任务..NET拥有一个精心构建的集合类系统,它利用迭代器的功能实现对数据的顺序访问. 惰性枚举是一个迭代方法,其核心思想是只在需要的时候才去读取数据.这个思想保证了任何迭代算法都十分有效,同时又可以灵活地根据需要读取任意多的数据,而且不会造成过多的开销. C#函数式程序设计之枚举元素 .NET集合类型的基础是一个名为IEnumberable的接口,以下就是这个接口的声明: public interface IEnumerable { IEnumerat…