共计 3098 个字符,预计需要花费 8 分钟才能阅读完成。
1、引言
这个规范是掂量代码自身的缺点,也是掂量一个研发人员自身的价值。华为作为一家全球化的 IT 公司,十几万员工,无论是人事管理,还是代码治理,都是一件不容易的事件,没有标准的束缚,想想都是件可怕的事件。上面筛选了一些网上流传的编程标准,一起来学习下,以下内容不波及根底的语法标准(请见 Refer),更侧重于一些编程习惯,如何进步程序的健壮性、可维护性等。(PS:以下内容未经官网考据,如阅读者呈现不适,请抉择立刻敞开本页 -_-|||)
2、军规简介
军规一:【防止在程序中应用魔鬼数字,必须用有意义的常量来标识。】
军规二:【明确办法的性能,一个办法仅实现一个性能。】
军规三:【办法参数不能超过 5 个】
军规四:【办法调用尽量不要返回 null,取而代之以抛出异样,或是返回特例对象(SPECIAL CASE object,SPECIAL CASE PATTERN);对于以汇合或数组类型作为返回值的办法,取而代之以空集合或 0 长度数组。】
军规五:【在进行数据库操作或 IO 操作时,必须确保资源在应用结束后失去开释,并且必须确保开释操作在 finally 中进行。】
军规六:【异样捕捉不要间接 catch (Exception ex),应该把异样细分解决。】
军规七:【对于 if „ else if „(后续可能有多个 else if …)这种类型的条件判断,最初必须蕴含一个 else 分支,避免出现分支脱漏造成谬误;每个 switch-case 语句都必须保障有 default,避免出现分支脱漏,造成谬误。】
军规八:【覆写对象的 equals()办法时必须同时覆写 hashCode()办法。】
军规九:【禁止循环中创立新线程,尽量应用线程池。】
军规十:【在进行准确计算时 (例如: 货币计算) 防止应用 float 和 double,浮点数计算都是不准确的,必须应用 BigDecimal 或将浮点数运算转换为整型运算。】
3、军规阐明
军规一:【防止在程序中应用魔鬼数字,必须用有意义的常量来标识。】阐明:是否是魔鬼数字要基于容易浏览和便于全局替换的准则。0、1 作为某种业余畛域物理量枚举数值时必须定义常量,严禁呈现相似 NUMBER_ZERO 的“魔鬼常量”。
军规二:【明确办法的性能,一个办法仅实现一个性能。】阐明:办法性能太多,会减少办法的复杂度和依赖关系,不利于程序浏览和未来的继续保护,无论是办法还是类设计都应合乎繁多职责准则。
军规三:【办法参数不能超过 5 个】阐明:参数太多影响代码浏览和应用,为缩小参数,首先要思考这些参数的合理性,放弃办法性能繁多、优化办法设计,如果参数的确无奈缩小,能够将多个参数封装成一个类(对象),同时思考在新的类(对象)中减少相应的行为,以期更合乎 OOP。
军规四:【办法调用尽量不要返回 null,取而代之以抛出异样,或是返回特例对象(SPECIAL CASE object,SPECIAL CASE PATTERN);对于以汇合或数组类型作为返回值的办法,取而代之以空集合或 0 长度数组。】阐明:返回 null 会减少不必要的空指针判断,脱漏判断也会导致重大的 NullPointerException 谬误。
军规五:【在进行数据库操作或 IO 操作时,必须确保资源在应用结束后失去开释,并且必须确保开释操作在 finally 中进行。】阐明:数据库操作、IO 操作等须要敞开对象必须在 try -catch-finally 的 finally 中 close(),如果有多个 IO 对象须要敞开,须要别离对每个对象的 close()办法进行 try-catch, 避免一个 IO 对象敞开失败其余 IO 对象都未敞开。
军规六:【异样捕捉不要间接 catch(Exception ex),应该把异样细分解决。】阐明:catch (Exception ex)的后果会把 RuntimeException 异样捕捉,RuntimeException 是运行期异样,是程序自身考虑不周而抛出的异样,是程序的 BUG,如有效参数、数组越界、被零除等,程序必须确保不能抛出 RuntimeException 异样,不容许显示捕捉 RuntimeException 异样就是为了不便测试中容易发现程序问题。
军规七:【对于 if „ else if „(后续可能有多个 elseif …)这种类型的条件判断,最初必须蕴含一个 else 分支,避免出现分支脱漏造成谬误;每个 switch-case 语句都必须保障有 default,避免出现分支脱漏,造成谬误。】
军规八:【覆写对象的 equals()办法时必须同时覆写 hashCode()办法。】阐明:equals 和 hashCode 办法是对象在 hash 容器内高效工作的根底,正确的覆写这两个办法能力保障在 hash 容器内查找对象的正确性,同时一个好的 hashCode 办法能大幅晋升 hash 容器效率。
军规九:【禁止循环中创立新线程,尽量应用线程池。】
军规十:【在进行准确计算时 (例如: 货币计算) 防止应用 float 和 double,浮点数计算都是不准确的,必须应用 BigDecimal 或将浮点数运算转换为整型运算。】阐明:浮点运算在一个范畴很广的值域上提供了很好的近似,然而它不能产生准确的后果。二进制浮点对于精度计算是十分不适宜的,因为它不可能将 0.1——或者 10 的其它任何次负幂准确示意为一个长度无限的二进制小数。
具体案例请参考:浮点数加法引发的问题:浮点数的二进制示意
http://my.oschina.net/leejun2…
4、无关开发效率和合作的几点倡议与心得体会
明天看到某同学写给团队成员的一封邮件,发现比拟通用,分享进去吧:
1、小提交:
把大的工作拆分成多个独立小工作,每实现小工作确保无 Bug 后就能够提交合并到主分支甚至公布;频繁提交有利于本人把控我的项目进度、升高危险、同其他人合作和代码 Review ; 每天能够提交合并屡次。每个小工作是 1-2 个小时能够实现的粒度,最大的一天实现。并行做多个工作的时候,优先做最短时间可能实现的工作。
2、命名标准:
尽量避免无意义的字符做变量 比方 a, b, t。能够逐渐改善,能够参考:http://google-styleguide.goog…
3、防止适度设计: 可能用简略形式实现的性能,不引入简单的类,对象,防止不必要的 new 对象,防止引入不必要的泛型、线程。开发初期冗余大于形象和依赖。防止本人从新实现比拟通用的组件和函数。调研多种实现形式的时候,选用做简略的实现形式。尽量少写代码。
4、Web 工程尽量避免在利用外部保留“状态”,这样能够适应频繁公布、重启无影响。
5、长于用打日志的形式调试,在程序关键点打日志。尽量少用断点形式,日志形式能够批量调试一批性能,效率绝对高。
6、防止一屏显示不下的超大函数。
7、增加必要、简洁的正文:
循环中的 continue, break 尽量加上单行正文;尽量避免非函数结尾的 return,必要的时候加正文。类主动生成 toString() 办法,不便调试和打日志。
8、不把本人局限到做某个性能,每个人都是整个我的项目的 Owner,尽量穿插 Review,穿插开发。
9、遇到问题及时和其他人沟通,避免浪费工夫。
10、从最终产品的指标扫视本人细小的设计,相熟本人负责局部的上下游代码。时刻关注最终产品(Web 界面和日志),发现 Bug 和能够改善的中央。
起源:blog.csdn.net/chenleixing/article/details/44173985
欢送关注我的微信公众号「码农解围」,分享 Python、Java、大数据、机器学习、人工智能等技术,关注码农技术晋升•职场解围•思维跃迁,20 万 + 码农成长充电第一站,陪有幻想的你一起成长