zoukankan      html  css  js  c++  java
  • 避免双重否定

    概念:本文中的”避免双重否定”是指把代码中的双重否定语句改动成简单的肯定语句,这样即让代码可读。同一时候也给维护带来了方便。

     

    正文:避免双重否定重构本身很easy实现。但我们却在太多的代码中见过由于双重否定减少了代码的可读性以致于很让人easy误解真正意图。存在双重否定的代码具有很大的危害性。由于这样的类型的代码easy引起错误的如果,错误的如果又会导致书写出错误的维护代码,终于会导致bug产生。

    详细能够看以下的代码:

    using  System.Collections.Generic;
    using  LosTechies.DaysOfRefactoring.SampleCode.BreakMethod.After;
    
    namespace  LosTechies.DaysOfRefactoring.SampleCode.DoubleNegative.Before
    {
        public class  Order
        {
            public void  Checkout(IEnumerable<Product> products, Customer  customer)
            {
                if  (!customer.IsNotFlagged)
                {
                    // the customer account is flagged
                    // log some errors and return
                    return;
                }
    
                // normal order processing
            }
        }
    
        public class  Customer
        {
            public decimal  Balance { get; private set; }
    
            public bool  IsNotFlagged
            {
                get  { return  Balance < 30m; }
            }
        }
    }

     

    如上代码中的双重否定可读性很低,由于我们很难搞明确双重否定的正确值。

    要重构它也很easy。例如以下是重构后的代码:

    using System.Collections.Generic;
    using LosTechies.DaysOfRefactoring.SampleCode.BreakMethod.After;
    
    namespace LosTechies.DaysOfRefactoring.SampleCode.DoubleNegative.After
    {
        public class Order
        {
            public void Checkout(IEnumerable<Product> products, Customer customer)
            {
                if (customer.IsFlagged)
                {
                    // the customer account is flagged
                    // log some errors and return
                    return;
                }
    
                // normal order processing
            }
        }
    
        public class Customer
        {
            public decimal Balance { get; private set; }
    
            public bool IsFlagged
            {
                get { return Balance >= 30m; }
            }
        }
    }

     

    总结: ”双重否定“非常easy让人产生错误的推断,也非常难让人理解你的代码。所以这个重构在我们的代码中是非常重要的,尤其是在推断条件非常多且业务复杂的时候。

  • 相关阅读:
    Http无状态协议
    API
    在IE里嵌入播放器
    ASP.NET中常用的优化性能方法(转)
    分布式应用程序
    VS2007的beta版下载地址
    组合还是继承(转)
    您不能初始化一个远程桌面连接,因为在远程计算机上的windows登录软件被不兼容的软件取代
    .Net平台开发的技术规范与实践精华总结(转)
    什么是“分布式应用系统”
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7056527.html
Copyright © 2011-2022 走看看