度量快速开发平台-专业、快速的软件定制快开平台
标题: C#函数式编程 [打印本页]
作者: Adam丶鱼 时间: 2020-6-7 18:28
标题: C#函数式编程
编程语言范式
常见的编程范式有命令式编程(Imperative programming),函数式编程,逻辑式编程;
许多现存的编程语言都可基于其计算模型加以分类,归入某些语言族,或者属于某种编程范式。按照不同的规则,可以有多种分类的方法,而且不同的学者对某些语言的具体归属也有不同的意见。
给出一种系谱:
说明式(Declarative ) 命令式( Imperative )
函数式 Lisp, ML, Haskell 冯诺依曼 C, Ada, Fortran
数据流 ld, Val 脚本式 Perl, Python, PHP
逻辑式 Prolog 面向对象 Smalltalk, C++, Java, C#
基于模板 XSLT
有些编程范式并不能按以上的方法进行分类,比如:元编程,泛型编程。
一种语言并不是只从属于一种编程范式,有些语言本身就是为支持多范式设计的;
比如:Lisp就同时支持函数式编程、面向对象、元编程。
命令式编程是面向计算机硬件的抽象,有变量(对应着存储单元),赋值语句(获取,存储指令)表达式(内存引用和算术运算)和控制语句(跳转指令);
函数式编程
定义
In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.
函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。<Wiki> 函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式。
函数式编程最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程的函数的计算比指令的执行更重要。和过程化编程相比,函数式编程的函数的计算可随时调用。纯函数式编程不需要变量;
语言族
函数式编程中最古老的例子可能要数1958年被创造出来的LISP,当年的Lisp由于各种设计缺陷(内存损耗、闭包问题、生成程序执行效率等)没能发展好。较现代的例子包括Haskell、Clean、Erlang 和Miranda等。
现代编程语言,如C#、Python、Ruby、Scala等等,它们都受到了函数式编程语言的影响,比如C#中的lamada表达式、Linq。
基于JVM实现的Lisp方言如Scala, Clojure也是越来越受关注,这里所谓的Lisp方言,主要是因为语法上沿用了Lisp中的S表达式。 基于.net平台的有F#,微软的首个函数式编程语言。<MSDN>
不同语言的抽象层次
高计算
C# -----> 对象
Python -----> 函数式
C语言 -----> 函数 (面向过程)
汇编语言
低计算机硬件 -----> 指令计算机
函数式复兴
从一个数组中找出所有的偶数
List<int> list = new List<int> { 1,2,3,4,5,6,7};
常规的命令式写法:
List<int> ret = new List<int>();
foreach (var item in list)
{ if (item % 2 == 0)
ret.Add(item); }
声明式的写法: var ret = list.Where((x) => x % 2 == 0);
多核与并行
使用命令式编程语言写程序时,我们经常会编写如x = x + 1这样的语句,此时我们大量依赖的是可变状态,或者说是“变量”,它们的值可以随程序运行而改变。可变状态非常强大,但随之而来的便是被称为“副作用”的问题,例如一个无需参数的void方法,它会根据调用次数或是在哪个线程上进行调用对程序产生影响,它会改变程序内部的状态,从而影响之后的运行效果。而在函数式编程中则不会出现这个情况,因为所有的状态都是不可变的。事实上对函数式编程的讨论更像是数学、公式,而不是程序语句,如x = x + 1对于数学家来说,似乎只是个永不为真的表达式而已。
函数式编程十分容易并行,因为它在运行时不会修改任何状态,因此无论多少线程在运行时都可以观察到正确的结果。假如两个函数完全无关,那么它们是并行还是顺序地执行便没有什么区别。
函数式编程特性 与技术
函数是一等公民 闭包
高阶函数 惰性求值
递归 缓存技术
不可变状态 尾调用消除
柯里化 内存回收
作者: Adam丶鱼 时间: 2020-6-7 18:29
作者: fteair 时间: 2020-6-10 14:33
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) |
Powered by Discuz! X3.2 |