zoukankan      html  css  js  c++  java
  • 提高代码质量系列之二:重构小技巧——if篇

    前言:

      if,相信是童鞋们使用的最频繁的关键字了,而且很多时候,我们使用的if都是在无意识的状态下随手而为。键入if,两下回车(我使用了resharper,可以自动编排if的格式),再信手写下我们需要的逻辑,一段可以“正常运行”的代码就被我们实现了。尽管这段逻辑比较复杂,但在那个时间段,我们对这段业务的前后流程已经有了很长时间的思考,所以可以比较轻松的写出来。但问题来了,一段时间之后,我们发现这里需要修正下,更或者是为了提高鲁棒性,需要为某个变量考虑更多的情况——即进一步添加更多的if。然后,看着那大段大段的if else,我们蛋疼之余,也会小小的钦佩,当时我是怎么写出这么牛逼的代码的?

    • dictionary代替选择类if语句

    if本身没有选择的功能,为了实现这点,有的人是这样写的:

    if (orderinfo.State == 1)
    {
    result = "已预定";
    }
    else if (orderinfo.State == 2)
    {
    result = "已售出";
    }

    else if 。。。

    或者

    result = orderInfo.State == 0 ? "待确认" : orderInfo.State == 1 ? "执行中" : orderInfo.State == 2 ? "已完成" : orderInfo.State == 3 ? "已解除" : "";

    既琐碎,可读性也不高,而且效率还低(当然,这种情况数据量一般不大)

    如果用dictionary,

          public Dictionary<int, string> OrderStatedDictionary = new Dictionary<int, string>()
            {
                {0, ""},
                {1, "已预订"},
                {2, "已售出"},
                {3, "待确认"},
            };

    调用的时候,用OrderStatedDictionary[]的方式,这样无疑代码会美观很多。

    • 避免if的多层嵌套

    两段代码比较

     public string GetNowState(int p1, int p2 , int p3)
            {
                if (CheckMethod1(p1))
                {
                    if (CheckMethod2(p2))
                    {
                        if (CheckMethod3(p3)))
                        {
                            return GetResult1();
                        }
                    }
                }
                return "";
            }
            public string GetNowState(int p1, int p2, int p3)
            {
                if (!CheckMethod1(p1))
                {
                    return "";
                }
                if (!CheckMethod2(p2))
                {
                    return "";
                }
                if (CheckMethod3(p3)) )
                {
                    return GetResult1();
                }
                return "";
            }
        }

    前者有三层的if嵌套,而后者的逻辑着完全是一条线串下来,代码量少无所谓,但一旦行数超过50行了,哪种代码更容易看不用多说。

    • 待续。。。。

      哎~! 本来我总结了很多的,只是前段时间太忙,一直没时间写, 现在刚从上家公司辞职,还要过几天才去新公司报道,才有时间写点东西,结果居然一时想不起来了,只记得这两点了,以后再补充。

    也欢迎大家把自己的总结贴一下。

  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/suijing/p/3570289.html
Copyright © 2011-2022 走看看