• 避免双重否定


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

     

    正文:避免双重否定重构本身很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让人产生错误的推断,也非常难让人理解你的代码。所以这个重构在我们的代码中是非常重要的,尤其是在推断条件非常多且业务复杂的时候。

  • 相关阅读:
    学了这些,你就算入门DIV+CSS了(转)
    【转】Web service是什么?
    [转]MongoDB插入和查询操作
    【转】安装m2e最佳方案
    XDS框架基本事务及其Soap消息实例
    数据表改变之后数据的迁移
    HL7 PID (Patient Identification) Segment(HL7规定的PID字段)
    海量数据库的设计
    【转】基于Axis2开发WebService
    【转】JAVA 调用Web Service的方法
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7056527.html
Copyright © 2020-2023  润新知