• 提高代码质量系列之二:重构小技巧——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行了,哪种代码更容易看不用多说。

    • 待续。。。。

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

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

  • 相关阅读:
    PowerDesigner数据模型(CDM—PDM)
    Eclipse解决JSP页面乱码问题
    mysql中Access denied for user 'root'@'localhost' (using password:YES)
    PS小技巧
    sublime使用心得
    Java的变量命名
    Java栈和堆的区别
    Mac 快捷键
    用shell脚本监控进程是否存在 不存在则启动的实例
    linux怎么运行.SH文件
  • 原文地址:https://www.cnblogs.com/suijing/p/3570289.html
Copyright © 2020-2023  润新知