测试中的代码分享~将可以合并的方法去合并Func不赖
在面向对象的设计中,我们经常会谈到“重构”,而重构之中有个叫合并方法的,就是将多个方法干的事类似,或者说,方法体的长向很像,那么,我们需要去考虑,将它们进行抽象!
原来的代码:
/// <summary>
/// 单数累加
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
static int AddOpreation(int a, int b)
{
int sum = ;
for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++)
{
sum += i;
}
return sum;
}
/// <summary>
/// 乘方累加
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
static int AddInvolutionOpreation(int a, int b)
{
int sum = ;
for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++)
{
sum += i * i;
}
return sum;
}
可以看到这两个方法的方法体基本相同 ,只是在累加时第一个是原数累加,第二个方法是原数的乘方作累加,对于上面的代码,我们可以进行再次抽象,将不相同
的代码逻辑提出来,我们知道.net 3.5有了Action和Func两个委托,事实上,这两个委托是微软为我们封装好的,原来就是因为它们常用,所以,人家直接给封装好了,这一点,是值得我们去学习的,有人说,微软的东西升级快,但我要说的是,它的升级不是语言本身的升级,而是为了让开发人员更方便的使用它,让开发人员
的代码写出来更可读,让代码的艺术性更强,这是我想说的。
下面是把变化的部分抽象之后的结果,看代码:
/// <summary>
/// 按着某种方法进行累加
/// </summary>
/// <param name="func"></param>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
static int BothIntegerOpreation(Func<int, int> func, int a, int b)
{
int sum = ;
for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++)
{
sum += func(i);
}
return sum;
}
而在调用的时间,我们将具体的实现逻辑以参数的形式传递进来,有人说,委托用不到,但我想说,那是你对委托还不够了解!
Func<int, int> funcAdd = (a) => { return a; };//以变量的形式定义委托的实例逻辑
int res1 = BothIntegerOpreation(funcAdd, , );
int res2 = BothIntegerOpreation((a) => { return a * a; }, , );//直接在方法调用时写逻辑
Console.WriteLine(res1.ToString() + res2.ToString());
结果如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAwCAIAAABVDSmEAAAEuElEQVR4nO3Z609TZxwH8L4VcQMEJ2XD3mSXIjAHqLRcXm3LFqO4MDeny5aMZCJyaVEK9HKqDBB0uDkvccs0TBYNmdmyZYlJm/hucjFZk/0Np6+sLZdzgbKzF8/pw3PO6eX00B4WeL75vTh9+pySfPrL0+c5aDgcVaL55+8nuFQoDK0WdI6pbZ21fW/b9r1nQOWWnckta88ta899tX0HX2d3vHb2BVCvd7wI643OPFDmzjxzZ765K9/clV/elV/eVVDeXbCvu2Bf905QFbadFbbCClthpa2w0l5YaS+qtBdV2YuqeoqqenZV9ex6E9S5l/bztXv/+d1v8VVcfb64uheUtqZXW+PQ1ji0tY6SWkdJbV9Jbd/LB2J1sP8VWIcGSkHVDZTWOfeAsjh1FqfO4tJZXDqrS2916a1ufb1bX+82gGrwGBo8xgaPsdFjbCSMjYSpkTA1EaYmL4ZWF9o7OCKz3mnpzzGdxtAKof+ano1b0zNzM3NPp2efPpmZAyPewZEcQyuGVghNsSsyyzs4sm1DocFuSQQNBkXQYFAxNLg9w9DRaNTnD7S4p45fePDx8P1Prkx+em0iSJIsQ8Oytt1lGTouNLphBNDgGkKjE9YDzSsLOxoMijoaDIKOlu5qU0LzyocGSusGpLfrLC7poKHejb6E0Pw+GmCtRqM+f6Dj+h/dt3+33/n13L2HjgdTMqHBB8np6I2CLq7u5TiOYVe0Nb2KoffUOaEyhNZb3VAZdHRMWdDRa9Dzi5TPH/BMPjoy8v17o98evjrefGMMQDMMzdAUy9DNN8dUgwYzMwsNgy4dYCQ5NFw6UGi4dKQHvbBI+fyBd4e+e//KN0eufX3s1mjLj0NBkmQYBnb06T87pNCcMAAavpQDDSen7GgwTfRjGFMW/BhC5ZTQcTt6TRmBjikL1mgwiK7RqaCXaJ8/cHj86tHrlz+4fen43cETk0SQJJdZBl095He0TGgwkmfmL7IKzbAr/xfo5ptjLT8MfzRx8eTP7s+m+oIkydKUCtBrTZ0YGiqj0IjyGjSqLF2jU+46wO2i7R0YFO06oHLa0B/e+erEPe+p+87Pf3F88VtPkCRnY2FoOhIJh5+HstTRKX8MMwXNN7VS6FhfC6DBhRQaXAuglyhm4qeHPn8ALRR6aXExFAqFnj1La43mOE66veO5JWs0h3Q0eJkpaOlfT/JjKIWW3i5neycKD/18nuZWWY5bjrJL3CrDcasct/zvCsXQFE1RCwvz4Ug4EgkvzEc25MASUxacDHll4cmQV1Z6MuSVs3cy7HddjPtkY+jS5eHR8QvIyNvHbPgIvo6nd8Yvtxla5VSOoRU/VMKPSTE0ht7w//FskdIQOKpEQxBEE072w0NrcLIdDK1SMLRKwdAqBYV+HIv825NMTvejNnkgtAKXJLco+M42eQC0gkZOQpn83S0aZdAgce+CgxhaEBQ63TaUTkZHMLQg0o6WD5QIWtnXtsmTWWj57265yIFO1JsYOo2ItndJQNHxlOsDXjrESXkyxFiZCT6CqxQMrVIwtErB0CoFQ6sUDK1S4j7rkLOlwzvl9BL3ebR8PgwtN4ke/GPoDCdRR8MJyZcI6Xii+Vt8qfkPlFIXv4Pf0mcAAAAASUVORK5CYII=" alt="" />
测试中的代码分享~将可以合并的方法去合并Func不赖的更多相关文章
- 针对MSHFlexGrid的一系列通用方法-项目中实践代码分享
1.给MSHFlexGrid填充数据通用方法 '自定义报表填充程序 fgrid Public Function ShowformfData(Resultset As ADODB.Recordset, ...
- 新书《编写可测试的JavaScript代码 》出版,感谢支持
本书介绍 JavaScript专业开发人员必须具备的一个技能是能够编写可测试的代码.不管是创建新应用程序,还是重写遗留代码,本书都将向你展示如何为客户端和服务器编写和维护可测试的JavaScript代 ...
- 使用强大的 Mockito 测试框架来测试你的代码
原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...
- Web测试中常见分享问题
Web测试中,由于开发通常指注重完成H5页面的逻辑功能,对各种系统.浏览器等考虑不周,同时Android端各类机型碎片化,容易产生兼容性问题,这其中以分享类型为最. 本文简单分析总结一些测试 ...
- Java 中静态代码块初始化问题测试
Java 中静态代码块初始化问题测试 原创 情况一:变量是 static final 修饰的"编译期常量",如 public static final String a = &qu ...
- XGBoost中参数调整的完整指南(包含Python中的代码)
(搬运)XGBoost中参数调整的完整指南(包含Python中的代码) AARSHAY JAIN, 2016年3月1日 介绍 如果事情不适合预测建模,请使用XGboost.XGBoost算法已 ...
- MVC常遇见的几个场景代码分享
本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步:代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本 ...
- 抓取oschina上面的代码分享python块区下的 标题和对应URL
# -*- coding=utf-8 -*- import requests,re from lxml import etree import sys reload(sys) sys.setdefau ...
- Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享
Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...
随机推荐
- 什么是JS事件冒泡
什么是JS事件冒泡? 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个 ...
- C语言的本质(27)——C语言与汇编之计算机结构
现代计算机都是基于冯·诺依曼或哈佛体系结构的,不管是嵌入式系统.个人电脑还是服务器.这种两种体系结构的主要特点是:CPU和内存是计算机的两个主要组成部分,内存中保存着数据和指令,CPU从内存中取指令执 ...
- Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
Unix/Linux家族人员众多,我们无法一一讲解如何配置环境. 本文选定我们在前面安装的RHEL6 RHEL7 MAC10.9.3 Solaris11如何跑起来helloworld RHEL 6 上 ...
- 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 分类: dp 2015-05-21 10:50 14人阅读 评论(0) 收藏
Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并 ...
- 【hihocoder 1249 Xiongnu's Land】线性扫描
2015区域赛北京赛区的三水,当时在赛场上没做出的原因是复杂度分析不正确导致把方法想复杂了.近来复习复杂度分析,觉得不能只是笼统地看渐进复杂度(big-O),更应根据算法的伪码计算真正的以基本操作数为 ...
- uva 10026 Shoemaker's Problem _贪心
题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序. 思路:工作和工作之间排序,如果a.value*b.day>b.valu ...
- 如何使用TestFlight进行App构建版本测试(转)
在日常的开发当中,当一个项目在开发过程中或者完成准备上线,都需要我们进行真机测试,否则不可能开发完了就直接扔到了App,等上线了再下载看看,这都是不可能的.那么说到真机测试,大家肯定会想到弄一个99美 ...
- Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等
写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...
- DB2数据库常用基本操作命令
点击开始菜单-->所有程序-->IBM-->DB2-->DB2COPY1-->命令行工具-->命令窗口一.DB2实例操作1.查看DB2数据库的版本及安装目录 E:\ ...
- jQuery的主要用法
一.选择网页元素jQuery的基本设计和主要用法,就是"选择某个网页元素,然后对其进行某种操作".这是它区别于其他函数库的根本特点. 使用jQuery的第一步,往往就是将一个选择表 ...