C# lambda 表达式 和=>的含义

函数式编程

函数式编程(英語:functional programming)或称函数程序设计泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程式状态以及易变物件。其中,λ演算为该语言最重要的基础。而且,λ演算的函数可以接受函数作为输入參數和输出返回值。

比起指令式編程,函數式編程更加強調程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。

在函数式编程中,函数是第一类对象,意思是说一个函数,既可以作为其它函数的输入参数值,也可以从函数中返回值,被修改或者被分配给一个变量。

Lambda表达式式函数编程的产物。因此必须理解函数是编程后才能理解Lambda表达式的含义。

λ演算

假定有一个黑箱子叫λ,x变量 输入到这个黑箱子中,然后输出x+ 1的结果,那么我们把整个过程写成为λx.x+1,这就是λ的全部内容。

在λ演算中,每个表达式都代表一个函数,这个函数有一个参数,并且會返回一个值。不论是参数和返回值,也都是一个单参的函数。可以这么说,λ演算中只有一种“类型”,那就是这种单参函数。函数是通过λ表达式匿名地定义的,这个表达式说明了此函数将对其参数进行什么操作。

Y算子(用来实现递归

Lambda表达式 ,要借助委托实现

 

Lambda表达式的定义

官方文档找不到Lambda表达式的定义,这边引用函数式编程,Lambda表达式的本质就是λ演算

函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式

 

=>的含义 

例子:x=>x+1;

=>应用的是式函数编程的思维。表示将=> 左边的参数x,输入到=> 右边的表达式x+1,然后得出一个结果,=>就是表示输入到。

C#中的lambda表达式是基于 vs编译能自动推导 参数类型。因为c#是强类型的语言必须要编译器期间确定参数类型。

 视频:https://www.bilibili.com/video/BV1VA411H7Ym?from=search&seid=4047102308513086552&spm_id_from=333.337.0.0

lambda 表达式lambda expression)是一个匿名函数, Lambda表达式可以表示闭包简单地讲,闭包是一个代码块(在C#中,指的是匿名方法或者Lambda表达式,也就是匿名函数),并且这个代码块使用到了代码块以外的变量,于是这个代码块和用到的代码块以外的变量(上下文)被“封闭地包在一起”。当使用此代码块时,该代码块里使用的外部变量的值,是使用该代码块时的值,并不一定是创建该代码块时的值。
一句话概括,闭包是一个包含了上下文环境的匿名函数。
lambda 表达式就是匿名函数的一种,匿名函数在编译成IL代码后 会生成一个类<.>c , 然后把委托打包成类中的字段,lambda 表达式打包方法,如下图所示:

 public Action<int> sd = x => x =x+10;
 public Action<int,int> ssd =(x,y) => x = x + y;

 

lambda表达式实现递归嵌套

Lambda在实现递归时候必须先声明和初始化
Lambda 表达式 nthFactorial ,然后再对其进行定义。 否则,会导致分配前引用 nthFactorial 时出现编译时错误。

public static int LambdaFactorial(int n)
{
Func<int, int> nthFactorial = default(Func<int, int>);
nthFactorial = number => number < 2
? 1
: number * nthFactorial(number - 1);
return nthFactorial(n);
}

 

posted @ 2021-09-30 16:53  小林野夫  阅读(518)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/