1、规范的代码能够促进团队合做
一个项目大多都是由一个团队来完成,若是没有统一的代码规范,那么每一个人的代码一定会风格迥异。且不说会存在多我的同时开发同一模块的状况,即便是分工十分明晰的,等到要整合代码的时候也有够头疼的了。大多数状况下,并不是程序中有复杂的算法或是复杂的逻辑,而是去读别人的代码实在是一件痛苦的事情。统一的风格使得代码可读性大大提升了,人们看到任何一段代码都会以为异常熟悉。显然的,规范的代码在团队的合做开发中是很是有益并且必要的。
2、规范的代码能够减小bug处理
不少IT人士将程序员比作民工,这也的确很是的形象。就像刚才提到的,复杂的算法或逻辑只占项目中很小的比例,大多仅仅是垒代码的工做。但是越是简单,测试的bug反而是越多,并且是无穷无尽的bug。这里很大的程度上是因为代码不规范所致。没有规范的对输入输出参数的规范,没有规范的异常处理,没有规范的日志处理等等,不但致使了咱们老是出现相似空指针这样低级的bug并且还很难找到引发bug的缘由。相反,在规范的开发中,bug不但能够有效减小,查找bug也变得垂手可得。规范不是对开发的制约,而确实是有助于提升开发效率的。 程序员
3、规范的代码能够下降维护成本
随着咱们项目经验的累积,会愈来愈重视后期维护的成本。而开发过程当中的代码质量直接影响着维护的成本。所以,咱们不得不从开发时便当心翼翼。在第一点中曾提到,规范的代码大大提升了程序的可读性,几乎全部的程序员都曾作过维护的工做,不用多说,可读性高的代码维护成本必然会大大下降。可是,维护工做不只仅是读懂原有代码,而是须要在原有代码基础上做出修改。咱们能够先想像没有统一风格的状况下,A完成开发之后,B进行维护加一段代码,过一段时间C又加一段代码。。。。。。直到有一天X看到那一大堆乱码想死的心都有了,维护也就进行不下去了。所以,统一的风格有利于长期的维护。另外,好的代码规范会对方法的度量、类的度量以及程序耦合性做出约束。这样不会出现须要修改一个上千行的方法或者去扩展一个没有接口的类的状况。规范的代码对程序的扩展性提升,无疑也是对维护人员的一个奖励。
4、规范的代码有助于代码审查
我我的是比较赞同进行代码审查的,这样能够及时纠正一些错误,并且能够对开发人员的代码规范做出监督。团队的代码审查同时也是一个很好的学习机会,对成员的进步也是颇有益的。可是,开发随意,加剧的代码审查的工做量及难度,而且使得代码审查工做没有根据,浪费了大量的时间却收效甚微。代码规范不只使得开发统一,减小审查拿督,并且让代码审查有据可查,大大提升了审查效率和效果,同时代码审查也有助于代码规范的实施。一举多得,何乐而不为呢。
5、养成代码规范的习惯,有助于程序员自身的成长
即便明白代码规范的好处,可是有的迫于项目压力,有的由于繁琐的规范做出不少额外的工做,更有的不重视维护的问题,而很难贯彻代码规范。那么,咱们须要了解,规范开发最大的受益人实际上是本身!你有没有花费不少的时候查找本身的代码呢?尤为是出现bug的时候须要逐行的debug?本身写的代码乱了头绪的确实也见了很多。咱们应该作的就是规范开发,减小本身出现的错误。不少时候项目的压力一部分也是因为前期开发中遗留的众多的问题。还有的人以为本身能够完成高难度的算法,就认为本身能力很强,不把规范放在眼里。不少人确实是这样,追求个性,大概让别人看他的代码一头雾水更以为得意。却不知复杂的算法确实能够体现你我的的逻辑能力,可是毫不表明你的开发水平。咱们知道一些开源项目,一些大师级人物写得程序都是极其规范的。并不是规范了就表明高水平,其实是规范的代码更有利于帮助你理解开发语言理解模式理解架构,可以帮助你快速提高开发水平。不明白这点,即便你写的再高明的算法,没准哪天也被看成乱码别处理掉。记住!天天垒乱码(或许你不以为,可是大多时候在别人眼中确实就是乱码)并不能使你得到更多的进步,相反要达到高水平的程序员,养成良好的开发习惯是绝对必需的。不要沉迷表面的得失,看似无用的东西要通过慢慢的累积由量变达到质变的时候,你才能感觉到其价值所在。 算法
和我搭档的是林吉庆同窗,如下是他上次做业阶段三的代码,让咱们边看边发现问题。架构
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 随机生成_控制台 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Console.Write("请选择模式(一、分数 二、整数 三、混合):");//模式选择 14 String numType = Console.ReadLine(); 15 switch (numType) 16 { 17 case "1": Fraction(); break; 18 case "2": Integer(); break; 19 case "3": Mixture(); break; 20 default: Console.WriteLine("输入有误!");break; 21 } 22 Console.ReadLine(); 23 } 24 public static void Fraction()//分数模式 25 { 26 Console.Write("请输入生成题目数量:"); 27 String strnum = Console.ReadLine();//接收字符 28 int num = Convert.ToInt32(strnum);//转义 29 30 Console.Write("请输入生成数字上限:"); 31 String strmaxnum = Console.ReadLine();//接收字符 32 int maxnum = Convert.ToInt32(strmaxnum);//转义 33 34 Random R = new Random(); 35 int symbol = 0;//运算符 36 int n1, n2, m1, m2;//分数 37 for (int i = 0; i < num; i++)//循环输出 38 { 39 n1 = R.Next(1, maxnum); 40 n2 = R.Next(1, maxnum); 41 m1 = R.Next(1, maxnum); 42 m2 = R.Next(1, maxnum); 43 symbol = R.Next(0, 4); 44 if (n1 < n2) 45 { 46 Console.Write(n1 + "/" + n2); 47 } 48 else if (n1 == n2) 49 { 50 Console.Write(1); 51 } 52 else 53 { 54 Console.Write(n2 + "/" + n1); 55 } 56 switch (symbol) 57 { 58 case 0: Console.Write("+"); break; 59 case 1: Console.Write("-"); break; 60 case 2: Console.Write("*"); break; 61 case 3: Console.Write("/"); break; 62 } 63 if (m1 < m2) 64 { 65 Console.WriteLine(m1 + "/" + m2 + "="); 66 } 67 else if (m1 > m2) 68 { 69 Console.WriteLine(m2 + "/" + m1 + "="); 70 } 71 else 72 { 73 Console.WriteLine(1 + "="); 74 } 75 } 76 } 77 public static void Integer()//整数模式 78 { 79 Console.Write("请输入生成题目数量:"); 80 String strnum = Console.ReadLine();//接收字符 81 int num = Convert.ToInt32(strnum);//转义 82 83 Console.Write("请输入生成数字上限:"); 84 String strmaxnum = Console.ReadLine();//接收字符 85 int maxnum = Convert.ToInt32(strmaxnum);//转义 86 87 Random R = new Random(); 88 int symbol = 0;//运算符 89 for (int i = 0; i < num; i++)//循环输出 90 { 91 Console.Write(R.Next(1, maxnum)); 92 symbol = R.Next(0, 4); 93 switch (symbol) 94 { 95 case 0: Console.Write("+"); break; 96 case 1: Console.Write("-"); break; 97 case 2: Console.Write("*"); break; 98 case 3: Console.Write("/"); break; 99 } 100 Console.WriteLine(R.Next(1, maxnum) + "="); 101 } 102 } 103 public static void Mixture()//混合模式 104 { 105 Console.Write("请输入生成题目数量:"); 106 String strnum = Console.ReadLine();//接收字符 107 int num = Convert.ToInt32(strnum);//转义 108 109 Console.Write("请输入生成数字上限:"); 110 String strmaxnum = Console.ReadLine();//接收字符 111 int maxnum = Convert.ToInt32(strmaxnum);//转义 112 113 Random R = new Random(); 114 int symbol = 0;//运算符 115 int n1, n2, m1, m2;//分数 116 for (int i = 0; i < num; i++)//循环输出 117 { 118 if (i < (num / 2)) 119 { 120 Console.Write(R.Next(1, maxnum)); 121 symbol = R.Next(0, 4); 122 switch (symbol) 123 { 124 case 0: Console.Write("+"); break; 125 case 1: Console.Write("-"); break; 126 case 2: Console.Write("*"); break; 127 case 3: Console.Write("/"); break; 128 } 129 Console.WriteLine(R.Next(1, maxnum) + "="); 130 } 131 else 132 { 133 n1 = R.Next(1, maxnum); 134 n2 = R.Next(1, maxnum); 135 m1 = R.Next(1, maxnum); 136 m2 = R.Next(1, maxnum); 137 symbol = R.Next(0, 4); 138 if (n1 < n2) 139 { 140 Console.Write(n1 + "/" + n2); 141 } 142 else if (n1 == n2) 143 { 144 Console.Write(1); 145 } 146 else 147 { 148 Console.Write(n2 + "/" + n1); 149 } 150 switch (symbol) 151 { 152 case 0: Console.Write("+"); break; 153 case 1: Console.Write("-"); break; 154 case 2: Console.Write("*"); break; 155 case 3: Console.Write("/"); break; 156 } 157 if (m1 < m2) 158 { 159 Console.WriteLine(m1 + "/" + m2 + "="); 160 } 161 else if (m1 > m2) 162 { 163 Console.WriteLine(m2 + "/" + m1 + "="); 164 } 165 else 166 { 167 Console.WriteLine(1 + "="); 168 } 169 } 170 } 171 } 172 } 173 }
在看到他的代码的第一眼给个人感受就是格式至关的整齐,使读者能够很好的了解程序员想要表达的思想,并且在有的地方还加上了一些注释。可是在对他的程序进行运行测试后也发现了一些问题,这个混合模式为既有全为整数也有全为分数的,但没有一个式子中分数和整数并存的,并且也没有作出答案判断,还需有待增强。dom
PSP2.1 | Personal Software Process Stages | Time(min) |
Planning | 计划 | |
|
|
180 |
Development | 开发 | |
|
|
20 |
|
|
15 |
|
|
0 |
|
|
5 |
|
|
60 |
|
|
30 |
|
|
30 |
|
|
30 |
Reporting | 报告 | |
|
|
15 |
|
|
10 |
|
|
20 |