zoukankan      html  css  js  c++  java
  • 垃圾代码是这样练成的......

    很多人喜欢在网上,论坛里,QQ群里,向别人要代码...... 而我个人习惯,不太喜欢看别人代码,因为扔在论坛上的代码,虽然也有精品的,但是大多是新手练手,每每有看到哭笑不得的代码. 所以一般只看运行,看代码也就看看结构,层次.
    可是工作中,却每每需要去看别人的代码.....今天就遇到一个极品垃圾代码...
    一个类里面接近900行代码....线程不安全也就算了,真正能用的代码,不足一半,而那不足一半的代码中,几乎全是垃圾. 让人苦笑.

    举几个例子,也算给大家乐一乐,对新手也好引以为戒. 人都是新手走来的,都犯过低级错误,关键是不要有下次.

    1, 获取上个星期的今天.  用了长长的代码, 首先新建了SqlConnectin和SqlCommand, SqlDataAdapter.....然后从数据库执行"SELECT getdate()" 语句,得到一个DataSet, 然后从这个DataSet的Tables[0].Rows[0][0] 得到一个代码当前日期的object, 为了转成DataTime ,使用了DateTime.Parse(),而这个方法需要string,所以又ToString()了一下...... ....然后再费尽方法,在上面去掉了1星期.........
    其实大家都知道,这本非常简单的一句就够了

    DateTime.Today.AddDays(-7)


    2,获取本月的最后一天. 比上面更夸张.....整整用了近100行代码.....
     1        /// <summary>
     2        /// 获取当月的月未时间 如:20051130
     3        /// </summary>
     4        /// <returns></returns>

     5        public static DateTime GetMonthEnd(DateTime dt)
     6        {
     7            DateTime EndDate;
     8            string strYear, strMonth, strDay;
     9            strYear = dt.Year.ToString();
    10            strMonth = (dt.Month > 9? dt.Month.ToString() : "0" + dt.Month.ToString();
    11            strDay = GetDaysOfMonth(dt).ToString();
    12            string strDate = strYear + "-" + strMonth + "-" + strDay;
    13            EndDate = Convert.ToDateTime(strDate);
    14            return EndDate;
    15            
    16          
    17        }

    18
    19        /// <summary>本月有多少天</summary>
    20        /// <param name="dt">日期</param>
    21        /// <returns>天数</returns>

    22        private static int GetDaysOfMonth(DateTime dt)
    23        {
    24            int year, month, days = 0;
    25            year = dt.Year;
    26            month = dt.Month;
    27
    28            //--利用年月信息,得到当前月的天数信息。
    29            switch (month)
    30            {
    31                case 1:
    32                    days = 31;
    33                    break;
    34                case 2:
    35                    if (IsRuYear(dt))
    36                    {
    37                        days = 29;
    38                    }

    39                    else
    40                    {
    41                        days = 28;
    42                    }

    43
    44                    break;
    45                case 3:
    46                    days = 31;
    47                    break;
    48                case 4:
    49                    days = 30;
    50                    break;
    51                case 5:
    52                    days = 31;
    53                    break;
    54                case 6:
    55                    days = 30;
    56                    break;
    57                case 7:
    58                    days = 31;
    59                    break;
    60                case 8:
    61                    days = 31;
    62                    break;
    63                case 9:
    64                    days = 30;
    65                    break;
    66                case 10:
    67                    days = 31;
    68                    break;
    69                case 11:
    70                    days = 30;
    71                    break;
    72                case 12:
    73                    days = 31;
    74                    break;
    75            }

    76
    77            return days;
    78
    79        }

    80
    81        /// <summary>判断当前日期所属的年份是否是闰年</summary>
    82        /// <param name="dt">日期</param>
    83        /// <returns>是闰年:True ,不是闰年:False</returns>

    84        private static bool IsRuYear(DateTime idt)
    85        {
    86            int n;
    87            n = idt.Year;
    88
    89            if ((n % 400 == 0|| (n % 4 == 0 && n % 100 != 0))
    90            {
    91                return true;
    92            }

    93            else
    94            {
    95                return false;
    96            }

    97        }

    其实只需要1句:
    DateTime.Parse(dt.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1); 
    下个月1号向前走一天就是这个月最后一天了.

    整个类的各种方法代码中稀奇古怪的什么都有, 其实只是希望提醒一些新手,写代码注意思考.
  • 相关阅读:
    [译]Stairway to Integration Services Level 3
    [译]SSRS 报表版本控制
    java was started but exit code =-805306369
    There is no session with id XXX
    spring 线程安全
    navicat远程连接阿里云ECS上的MYSQL报Lost connection to MySQL server at 'reading initial communication packet'
    navicat链接阿里云mysql报80070007: SSH Tunnel: Server does not support diffie-hellman-group1-sha1 for keyexchange
    eclipse中的tomca的编辑页面server location灰色
    tomcat tomcat-user.xml被还原
    java元注解
  • 原文地址:https://www.cnblogs.com/syeerzy/p/346726.html
Copyright © 2011-2022 走看看