zoukankan      html  css  js  c++  java
  • 把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);

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

    原文链接:Put boolean arguments last [Technical Blog]

  • 相关阅读:
    微信机器人11python自制微信机器人,定时发送天气预报
    微信机器人10Python创建微信机器人
    微信小程序如何调用后台service(图文教程)
    python爬虫:使用Selenium模拟浏览器行为
    Python模拟浏览器发送http请求
    TextClip的list和search方法报错:UnicodeDecodeError: utf-8 codec canot decode byte 0xb7 in position 8
    TextClip构造方法报OSError:MoviePy creation of None failed because of the following [WinError 2]系统找不到指定的文件
    moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类详解
    moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip及使用案例
    moviepy音视频剪辑:mask clip遮罩剪辑、遮片、蒙版的作用以及其包含的构成内容
  • 原文地址:https://www.cnblogs.com/LoveJenny/p/2672792.html
Copyright © 2011-2022 走看看