注入式开发(二):.NET 匿名函数
其实匿名函数就是个委托。只不过写起来更简洁。
为啥要用匿名函数呢?只是为了装逼吗?
诺诺诺
比如说,我们写代码,写着写着,发现有2个函数非常相像:
string methodA(string data)
{
相同代码1。。。
methodA特有部分
相同代码2。。。
}
string methodB(string data)
{
相同代码1。。。
methodB特有部分
相同代码2。。。
}
不行,要重构。如果没有匿名函数,我们应该怎么重构呢?
重构方式一,将相同部分分拆出一个个独立的方法
void same1(string data){...}
void same2(string data){...}
string methodA(string data)
{
same1(data);
methodA特有部分
same2(data);
}
string methodB(string data)
{
same1(data);
methodB特有部分
same2(data);
}
重构方式二,写一个共用方法,然后在该方法里分情况处理原先A和B的特有部分:
string same(string data,string methodtype)
{
相同代码1。。。
if(methodtype == "A")
methodA特有部分
else
methodB特有部分
相同代码2。。。
}
string methodA(string data)
{
return same(data,"A");
}
string methodB(string data)
{
return same(data,"B");
}
重构方式一,多了2个方法;重构方式二,多了一个方法,然后原先的方法还多了一个参数。
下面用匿名函数进行重构
delegate string dlgMethod(string data);
string same(string data,dlgMethod dlg)
{
相同代码1。。。
//委托dlg处理每个method的特有部分
dlg(data);
相同代码2。。。
}
string methodA(string data)
{
return same(data,(data) =>
{
methodA特有部分
});
}
string methodB(string data)
{
return same(data,(data) =>
{
methodB特有部分
});
}
这种方式,提炼出一个公用方法,然后原先的方法参数不变。更值得一提的是,特有部分在原先每个方法里自行定义,逻辑更加清晰。
我认为,匿名函数比较适合应用在 特殊部分 位于方法的中间位置这种情况,故而很难提炼出一个公用的方法,而不得不提炼出两个。匿名函数本质是一个委托,委托的作用就像一把尖刀插向敌人的胸膛:插进其他对象,插进其他方法。
因此,我将使用委托命名为:注入式开发。
注入式开发(二):.NET 匿名函数的更多相关文章
- python之内置函数(二)与匿名函数、递归函数初识
一.内置函数(二)1.和数据结构相关(24)列表和元祖(2)list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素).tuple:将一个可迭代对象转化成元组(如果是字典,默认将k ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
- python函数知识六 内置函数二、匿名函数与内置函数三(重要)
19.内置函数二 abs():绝对值 lst = [1,2,-3,1,2,-5] print([abs(i) for i in lst]) enumerate("可迭代对象",&q ...
- python笔记十二(匿名函数)
一.匿名函数 有些情况下,我们需要把函数当做参数传入到另外的函数中,或者是把函数作为某个函数的返回值,此时我们就可以使用匿名函数. 匿名函数的标志是lambda. >>> f = ...
- Python内置函数二 (递归函数,匿名函数,二分法)
匿名函数 lambda() 语法: lambad 参数 : 返回值 def func(a,b): return a * b print(func(2,5)) a = lambda a ,b : a* ...
- day13 内置函数二 递归,匿名函数,二分法
.匿名函数(名字统一叫lambda) .语法 lambda 参数:返回值 .参数可以有多个,用逗号隔开 .只能写一行,执行结束后直接返回值 4返回值和正常函数一样,可以是任意值 .列: f=lambd ...
- 测开之路八十二:匿名函数:lambda表达式
# 匿名函数:lambda表达式# lambda 参数: 逻辑f = lambda name: print(name)f('tom') f2 = lambda x, y: x + yprint(f2( ...
- python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r
一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x p ...
- JavaScript的匿名函数和模块化的使用方法
对于开发人员来说,很多时候我们都会涉及到JavaScript的使用,而在使用过程中,最令人沮丧的就是变量没有相应的使用范围. 在开发中,对于任何变量.数组.函数.对象等,只要不在函数的内部,都会被默认 ...
- Day3-递归函数、高阶函数、匿名函数
一.递归函数 定义:函数内部可以调用其它函数,如果调用自身,就叫递归. 递归特性: 1.必须有结束条件退出: >>> def calc(n): ... print(n) ... re ...
随机推荐
- 23. STATISTICS
23. STATISTICS STATISTICS表提供有关表索引的信息. STATISTICS表有以下列: TABLE_CATALOG:包含索引的表所属的目录的名称.该值始终为def. TABLE_ ...
- 如何用纯 CSS 创作一个冒着热气的咖啡杯
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/xjXxoz 可交互视频教程 此视 ...
- Oracle开启和关闭的四种模式
>1 启动数据库 在cmd命令窗口,直接输入"sqlplus",直接进入oracle管理界面,输入用户名和密码后,开始启动数据库,启动数据库三个步骤:启动实例.加载数据库.打 ...
- python测试工具
https://wiki.python.org/moin/PythonTestingToolsTaxonomy mac pip安装 https://blog.csdn.net/ywj_486/arti ...
- tensorflow with gpu 环境配置
1.准备工作 1.1 确保GPU驱动已经安装 lspci | grep -i nvidia 通过此命令可以查看GPU信息,测试机已经安装GPU驱动
- Spring Boot 默认配置无法访问静态资源
问题:将资源放在resources/static目录下,Spring boot不能加载 解决:在启动文件中,添加如下红字部分. @SpringBootApplication @Configuratio ...
- 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)
网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...
- Sublime Text 3使用方法
一.下载安装 Sbulime Text 3官网 参考网站:http://lucida.me/blog/sublime-text-complete-guide/注意在安装时勾选Add to expl ...
- UVALive 2957 Bring Them There
Bring Them There Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. O ...
- [luoguP2618] 数字工程(DP)
传送门 离线处理... 先线性筛一遍. 直接预处理出所有答案. 注意要用push,用乘法,常数小. #include <cstdio> #include <cstring> # ...