垃圾代码是这样练成的......很有启发性的一篇文章

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

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

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

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号向前走一天就是这个月最后一天了.

整个类的各种方法代码中稀奇古怪的什么都有, 其实只是希望提醒一些新手,写代码注意思考.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值