• 避免双重否定


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

     

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

  • 相关阅读:
    勿忘心安
    设△ABC的内角A,B,C,所对的边分别为a,b,c,且acosB-bcosA=3/5c,则tan(A-B)的最大值为
    P1011 车站
    第一天
    P1134 阶乘问题
    P3152 正整数序列
    某数论
    DO YOU WANNA BUILD A SNOW MAN ?
    luogu P1579 哥德巴赫猜想(升级版)
    紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7056527.html
Copyright © 2020-2023  润新知