个人理解的Lambda表达式的演化过程

之前在组内进行过相关分享,为防止以后再单独整理,故在此将自己的PPT内容存放下。

委托

什么是委托?

定义:委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。

(1) 从数据结构来讲,委托是和类一样是一种用户自定义类型。
 (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象。

个人理解:将方法作为参数进行传递

很多时候委托接收的方法是一次性的或者方法体是非常简单的...

代码做减法

定义委托,很多时候签名(参数与返回值类型)可能是一样的。这样就没有必要定义重复的

匿名方法

匿名方法的背后:

Func和Action

每次使用委托,重复定义太傻气了,
微软在框架内一次定义好所有可能用到的委托。
那千变万化的方法签名怎么可能定义全?没关系,定义成泛型就可以解决问题

public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
 参数个数重载了16个

public delegate void Action();
参数个数重载了16次

Lambda

“=>”读作“goes to”

代码变成最后一种写法的要求:
   1.只能有一个传入参数
   2.方法体只能只一条语句。

关于第1点,lambda我们平时用得较多的是基于IEnumerable或IQueryable,
所以只能有一个参数也就满足了。

关于第2点,我们使用扩展方法的链式编程来解决,例:

总结"进化"过程

时间: 09-06

个人理解的Lambda表达式的演化过程的相关文章

通过Lambda表达式表示复合过程 SICP

通过Lambda表达式表示复合过程. Code #lang racket(define(square x)  (* x x));求和记法定义程序模式(define(sum term a next b)  (if(> a b)      0      (+(term a)         (sum term (next a) next b))))   ;使用lambda表达式构造匿名函数(lambda(x)(+ x 4))(lambda(x)(/1.0(* x (+ x 2))));使用lambd

理解Lambda表达式和闭包

了解由函数指针到Lambda表达式的演化过程 Lambda表达式的这种简洁的语法并不是什么古老的秘法,因为它并不难以理解(难以理解的代码只有一个目的,那就是吓唬程序员) 1 #include "stdafx.h" 2 using namespace System; 3 4 typedef void(*FunctionPointer)(System::String ^str); 5 6 void HelloWorld(System::String ^str) 7 { 8 Console:

C#Lambda表达式的理解:谓词方法 匿名方法 使用Lambda

Lambda表达式 "Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量.它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式.所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to".Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块. 下面三个方法会帮你会容易理解到Lambda表达式的好处,

lambda表达式之进化

前言 在C#我们可以自定义委托,但是C#为什么还要内置泛型委托呢?因为我们常常要使用委托,如果系统内置了一些你可能会用到的委托,那么就省去了定义委托,然后实例化委托的步骤,这样一来既使代码看起来简洁而干净又能提高程序员的开发速度,何乐不为呢!通过本文可以让你复习扩展方法,同时可以循序渐进的了解系统内置泛型委托的实现以及委托逐步的演化过程. Action 概念:封装一个方法,该方法具有五个参数并且不返回值.并且类型参数为逆变 下面我就自定义实现一个Action<T>无返回值的委托.我们同样定义一

Lambda 表达式与方法引用(二)

在上一章我们介绍了函数式编程的概念和函数式接口.Lambda 表达式就是函数式编程的具体体现,它需要借助函数式接口才能应用在 Java 语言中. 定义 在编程语言中,lambda 表达式是一种用于指定匿名函数或者闭包的运算符.Lambda 可以很清晰地表达一个匿名函数,可以被传递.有了 Lambda 表达式之后,Lambda 表达式为 Java 添加了缺失的函数式编程特性,使我们能将函数当作一等公民看待. 在将函数作为一等公民的语言中,Lambda 表达式的类型是函数.但在 Java 中,Lam

java8之lambda表达式入门

1.基本介绍 lambda表达式,即带有参数的表达式,为了更清晰地理解lambda表达式,先上代码: 1.1 两种方式的对比 1.1.1 方式1-匿名内部类 class Student{ private String name; private Double score; public Student(String name, Double score) { this.name = name; this.score = score; } public String getName() { ret

关于Lambda表达式访问外部变量

在<C#高级编程>一书中提到通过Lambda表达式可以访问Lambda表达式块外部的变量 ,这是一个很好的功能(类似Js中的 闭包).但是如果没有正确的使用,会非常危险. 比如下面的事例中 int someVal  = 5; Fun<int, int> f = x => x + someVal; Console.WriteLine(f(3)); 我们这个表达式的本意是返回一个数x+5的结果.所以f(3)的结果应该是 3 + someVal = 8. 但是如果以后在不经意中修改

009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用

一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法. 在Java中只有单继承,如果要让一个类赋予新的特性,通常是使用接口来实现,在C++中支持多继承,允许一个子类同时具有多个父类的接口与功能,在其他语言中,让一个类同时具有其他的可复用代码的方法叫做mixin.新的Java 8 的这个特新在编译器实现的角度上来说更

java8新特性之——lambda表达式的使用

lambda表达式简介 个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码.Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升. Lambda表达式的语法(记得要在jdk1.8及以上的jdk环境下实验) Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->&