把boolean 参数放到最后面(Put boolean arguments last)

简介:

在CodeProject上看到一篇有意思的文章,特翻译和分享下:

 

每当我看到一个方法调用如下:

Enum.TryParse(stringRepresentationOfEnum, true, out enumValue);

我就会想这个’true’ 参数代表的是什么意思呢。在这个例子中,基于我过去的经验我知道在这个方法中它代表的是ignoreCase 参数。

但是,如果这是一个你从未见过的完全不同的方法呢:

service.DoOperation(DateTime.Now, true, false, false, true, currentValue, userName);
 

这是一个特别XXX的方法。但是假设一下这就是这个方法必须要的签名,可悲的是,在这个方法想要明白boolean 参数的值的含义很难,

假设我们不能改变接口,我们还能做什么来让代码更清楚呢?

 

首先,我们可以为每个boolean值传递命名好的变量:

bool includeHeader = true;
bool checkSecurity = false;
bool validateDate = false;
bool fireCompletionEvent = true;
service.DoOperation(DateTime.Now, includeHeader, checkSecurity, validateDate, fireCompletionEvent, currentValue, userName);

 

 

除了代码有点不简洁外,这的确好了很多。

当然在C# 4.0 中,我们不需要这样做,相反我们可以使用命名参数:

service.DoOperation(DateTime.Now, includeHeader: true, checkSecurity: false, validateDate: false, fireCompletionEvent: false, currentValue, userName);

 

 

不幸的是,它并不能如期的正常运行 - 最后面的两个参数无法出现在命名参数的后面。

这意味着我们必须添加一些额外的代码:

service.DoOperation(DateTime.Now, includeHeader: true, checkSecurity: false, validateDate: false, fireCompletionEvent: false, currentValue: currentValue, userName: userName);

 

这就是为什么我建议把布尔参数放到参数列表的最后的原因:

service.DoOperation(DateTime.Now, currentValue, userName, includeHeader: true, checkSecurity: false, validateDate: false, fireCompletionEvent: false);

这的确清楚多了,但它确实需要你在设计你的方法签名时牢记这一点。

 






本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2012/09/06/2672792.html,如需转载请自行联系原作者
目录
相关文章
|
前端开发
swagger中响应参数为Boolean或是integer如何设置响应描述信息
项目使用swagger进行文档信息展示,现在有一个招聘者企业用户信息校验接口,响应参数只会返回true或是false,如何在接口文档中响应参数栏目中添加对返回字段的描述信息(true:校验成功;false:校验失败)?
swagger中响应参数为Boolean或是integer如何设置响应描述信息
|
Go Scala iOS开发
关于面向对象设计中类的方法是否应该使用boolean类型的参数
关于面向对象设计中类的方法是否应该使用boolean类型的参数
关于面向对象设计中类的方法是否应该使用boolean类型的参数
|
存储 API
SAP UI5关于navigation API的boolean参数
当用户点击Edit 操作的时候,edit页面从设计上来说不应该作为一个history保留下来,因此代码里调用oRouter.navTo时,如果传入false的时候,就是将其存在了跳转的历史记录里:
104 0
SAP UI5关于navigation API的boolean参数
|
1月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
45 3
|
8月前
|
前端开发 JavaScript
前端基础 - JavaScript值Boolean类型的默认转换
前端基础 - JavaScript值Boolean类型的默认转换
38 0
|
1月前
|
IDE Java 开发工具
阿里巴巴不建议 boolean 类型变量用 isXXX
阿里巴巴不建议 boolean 类型变量用 isXXX
30 1
|
1月前
|
算法 测试技术 编译器
【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean(二 )
【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean
46 0
|
1月前
|
程序员 编译器 C语言
【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean(一)
【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean
108 0
|
6月前
|
IDE Java 开发工具
阿里巴巴不建议 boolean 类型变量用isXXX的理由?
平时工作中大家经常使用到boolean以及Boolean类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用isXXX来命名呢?到底是用基本类型的数据好呢还是用包装类好呢?
|
10月前
|
JavaScript
TypeScript 与 JS 中类型首字母大小写区别(String、string、Number、number、Boolean、boolean ...)
TypeScript 与 JS 中类型首字母大小写区别(String、string、Number、number、Boolean、boolean ...)
211 0

热门文章

最新文章