精华内容
下载资源
问答
  • 华为内部代码规范.pdf

    2020-03-26 17:44:23
    华为内部代码规范
  • Java代码规范文档

    2018-08-19 12:59:49
    这是本人整理的一个Java代码规范,结合了Google编码规范,有些规范是结合了本人公司的规范的,并没有要求一定要按照此标准进行编写
  • 华为C++/C/java代码规范(完整版)

    热门讨论 2018-03-14 08:57:04
    最新的华为代码规范,适用于C++/C/java,高清带目录,格式标准的代码给自己和维护者都是一种享受,建议程序员多看看。
  • idea 代码规范模板配置 idea 代码规范模板配置 idea 代码规范模板配置
  • 代码规范代码规范

    2018-01-15 20:16:37
    代码规范代码规范代码规范代码规范代码规范代码规范代码规范代码规范代码规范
  • Android Studio 阿里java代码规范化插件、java开发手册、安卓开发手册
  • google推出的C++编码规范检查工具,一个python脚本,这是google使用的一个C++代码风格规范.
  • C++代码规范检查工具

    热门讨论 2013-04-11 18:44:42
    检查代码规范的神器,具体操作有文档。不会的看文档吧,挺好用,让自己走到规范的代码中去
  • 代码规范的好处

    千次阅读 2020-01-17 16:42:53
    代码规范化的第一个好处就是看着很整齐、很舒服。假如你现在用不规范的方式写了一万行代码,现在能看得懂,但等过了三个月你再回头看时就很吃力了,更不要说给别人看了。所以代码要写规范,比如加注释就是代码规范化...

    代码规范化的第一个好处就是看着很整齐、很舒服。假如你现在用不规范的方式写了一万行代码,现在能看得懂,但等过了三个月你再回头看时就很吃力了,更不要说给别人看了。所以代码要写规范,比如加注释就是代码规范化的一个思想。

    在一般情况下,根据软件工程的思想,我们的注释要占整个文档的20%以上。所以注释要写得很详细,而且格式要写得很规范。

    一、规范的代码可以促进团队合作


    一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异。且不说会存在多个人同时开发同一模块的情况,即使是分工十分明晰的,等到要整合代码的时候也有够头疼的了。大多数情况下,并非程序中有复杂的算法或是复杂的逻辑,而是去读别人的代码实在是一件痛苦的事情。统一的风格使得代码可读性大大提高了,人们看到任何一段代码都会觉得异常熟悉。显然的,规范的代码在团队的合作开发中是非常有益而且必要的。

    二、规范的代码可以减少bug处理


    很多IT人士将程序员比做民工,这也的确非常的形象。就像刚才提到的,复杂的算法或逻辑只占项目中很小的比例,大多仅仅是垒代码的工作。可是越是简单,测试的bug反而是越多,而且是无穷无尽的bug。这里很大的程度上是由于代码不规范所致。
    没有规范的对输入输出参数的规范,没有规范的异常处理,没有规范的日志处理等等,不但导致了我们总是出现类似空指针这样低级的bug而且还很难找到引起bug的原因。相反,在规范的开发中,bug不但可以有效减少,查找bug也变得轻而易举。
    规范不是对开发的制约,而确实是有助于提高开发效率的。

    三、规范的代码可以降低维护成本


    随着我们项目经验的累积,会越来越重视后期维护的成本。而开发过程中的代码质量直接影响着维护的成本。因此,我们不得不从开发时便小心翼翼。
    在第一点中曾提到,规范的代码大大提高了程序的可读性,几乎所有的程序员都曾做过维护的工作,不用多说,可读性高的代码维护成本必然会大大降低。
    但是,维护工作不仅仅是读懂原有代码,而是需要在原有代码基础上作出修改。我们可以先想像没有统一风格的情况下,A完成开发以后,B进行维护加一段代码,过一段时间C又加一段代码。。。。。。直到有一天X看到那一大堆乱码想死的心都有了,维护也就进行不下去了。因此,统一的风格有利于长期的维护。
    另外,好的代码规范会对方法的度量、类的度量以及程序耦合性作出约束。这样不会出现需要修改一个上千行的方法或者去扩展一个没有接口的类的情况。规范的代码对程序的扩展性提高,无疑也是对维护人员的一个奖励。

    四、规范的代码有助于代码审查


    我个人是比较赞同进行代码审查的,这样可以及时纠正一些错误,而且可以对开发人员的代码规范作出监督。团队的代码审查同时也是一个很好的学习机会,对成员的进步也是很有益的。但是,开发随意,加重的代码审查的工作量及难度,并且使得代码审查工作没有根据,浪费了大量的时间却收效甚微。
    代码规范不仅使得开发统一,减少审查拿督,而且让代码审查有据可查,大大提高了审查效率和效果,同时代码审查也有助于代码规范的实施。一举多得,何乐而不为呢。

    五、养成代码规范的习惯,有助于程序员自身的成长


    即使明白代码规范的好处,但是有的迫于项目压力,有的因为繁琐的规范作出很多额外的工作,更有的不重视维护的问题,而很难贯彻代码规范。
    那么,我们需要了解,规范开发最大的受益人其实是自己!
    你有没有花费很多的时候查找自己的代码呢?尤其是出现bug的时候需要逐行的debug?自己写的代码乱了头绪的确实也见了不少。我们应该做的就是规范开发,减少自己出现的错误。很多时候项目的压力一部分也是由于前期开发中遗留的众多的问题。
    还有的人觉得自己可以完成高难度的算法,就认为自己能力很强,不把规范放在眼里。很多人确实是这样,追求个性,大概让别人看他的代码一头雾水更觉得得意。殊不知复杂的算法确实可以体现你个人的逻辑能力,但是绝不代表你的开发水平。我们知道一些开源项目,一些大师级人物写得程序都是极其规范的。并非规范了就代表高水平,实际上是规范的代码更有利于帮助你理解开发语言理解模式理解架构,能够帮助你快速提升开发水平。不明白这点,即使你写的再高明的算法,没准哪天也被当作乱码别处理掉。


    记住!每天垒乱码(或许你不觉得,但是大多时候在别人眼中确实就是乱码)并不能使你获得更多的进步,相反要达到高水平的程序员,养成良好的开发习惯是绝对必需的。


    不要沉迷表面的得失,看似无用的东西要经过慢慢的累积由量变达到质变的时候,你才能感受到其价值所在。
     

    展开全文
  • 谷歌代码规范

    万次阅读 多人点赞 2019-01-19 14:49:42
    英文版:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml 中文版:... google c++ 编码规范:http://blog.csdn.net/xiexievv/articl...

    英文版:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

    中文版:http://zh-google-styleguide.readthedocs.org/en/latest/google-cpp-styleguide/

    google c++ 编码规范:http://blog.csdn.net/xiexievv/article/details/50972809

    网上有电子版 PDF ,可以下载看下。。。(电子版下载地址:https://pan.baidu.com/s/1i3gc7lF)

        Google C++ 编码规范很早就已经公开了,李开复也在其微博上公开分享:”我认为这是地球上最好的一份C++编程规范,没有之一,建议广大国内外IT研究使用。“
    
        Google C++ Style Guide是一份不错的C++编码指南,下面是一张比较全面的说明图,可以在短时间内快速掌握规范的重点内容。不过规范毕竟是人定的,记得活学活用。
    

    保持一致也非常重要,如果你在一个文件中新加的代码和原有代码风格相去甚远的话,这就破坏了文件本身的整体美观也影响阅读,所以要尽量避免。
    一些条目往往有例外,比如下面这些,所以本图不能代替文档,有时间还是把PDF认真阅读一遍吧。

    异常在测试框架中确实很好用
    
    RTTI在某些单元测试中非常有用
    
    在记录日志时可以使用流
    操作符重载 不提倡使用,有些STL 算法确实需要重载operator==时可以这么做。
    

    注:原图较大,在新标签页中打开或保存到本地打开更清晰

    在这里插入图片描述

    头文件

    函数参数顺序

    C/C++函数参数分为输入参数和输出参数两种,有时输入参数也会输出(注:值被修改时)。输入参数一般传值或常数引用(const references),输出参数戒输入/输出参数为非常数指针(non-const pointers)。对参数排序时,将所有输入参数置于输出参数之前。不要仅仅因为是新添加的参数,就将其置于最后,而应该依然置于输出参数之前。这一点并不是必须遵循的规则,输入/输出两用参数(通常是类/结构体变量)混在其中,会使得规则难以遵守。

    个人感受:这条规则相当重要,自己写代码的时候可能没有太大感觉,但是在阅读别人代码的时候感觉特别明显。如果代码按照这种规范来写,从某种角度来说,这段代码具有“自注释”的功能,那么在看代码的时候就会比较轻松。Doom3的代码规范中提到,“Use ‘const’ as much as possible”,也是同样的意义。当然,const除了阅读方便以外,还有个很重要的就是防止编码错误,一旦在程序中修改const变量,编译器就会报错,这样就减少了人工出错了可能性,这点尤为重要!

    包含文件的名称及次序

    将包含次序标准化可增强可读性、避免隐藏依赖(hidden dependencies,注:隐藏依赖主要是指包含的文件编译),次序如下:C 库、C++库、其他库的.h、项目内的.h。

    项目内头文件应挄照项目源代码目录树结构排列,并且避免使用UNIX文件路径.(当前目录)和…(父目录)。

    举例来说,google-awesome-project/src/foo/internal/fooserver.cc 的包含次序如下:
      #include “foo/public/fooserver.h” // 优先位置
      
      #include <sys/types.h>
      #include <unistd.h>

    #include <hash_map>
      #include

    #include “base/basictypes.h”
      #include “base/commandlineflags.h”
      #include “foo/public/bar.h”

    注意,对应的头文件一定要先包含,这样避免隐藏依赖,隐藏依赖的问题不懂的可以去Google,网上有很多资料。另外,《C++编程思想》中提到的包含次序正好相反,从特殊到一般,但是有一点和Google代码规范是一样的,那就是对应的头文件是第一个包含。对于隐藏依赖的问题,以前只是习惯性的把对应的头文件放第一个,没有想过为什么,现在学习了……

    作用域

    全局变量

    class 类型的全局变量是被禁止的,内建类型的全局变量是允许的,当然多线程代码中非常数全局变量也是被禁止的。永远不要使用函数返回值初始化全局变量。

    不幸的是,全局变量的构造函数、析构函数以及初始化操作的调用顺序只是被部分规定,每次生成有可能会有变化,从而导致难以发现bug。因此,禁止使用class类型的全局变量(包括STL的string,vector等),因为它们的初始化顺序可能会导致出现问题。内建类型和由内建类型构成的没有构造函数的结构体可以使用,如果你一定要使用class类型的全局变量,请使用单件模式。

    C++类

    构造函数的职责

    构造函数中只进行那些没有实际意义的初始化,可能的话,使用Init()方法集中初始化为有意义(non-trivial)的数据。

    个人感受:这种做法可以从一开始就避免一些bug的出现,或更容易解决一些bug。构造函数+Init()函数初始化的方式与只用构造函数的方法相比,对计算机来说他们是没有区别的,但是人是会犯错的,这一条代码规范在某种程度上避免了一些人为错误,这个在开发中特别重要。

    拷贝构造函数

    仅在代码中需要拷贝一个类的对象的时候使用拷贝构造函数,不需要拷贝时使用DISALLOW_COPY_AND_ASSIGN这个宏(关于这个宏的内容,可以在网上搜到,我这里就不写了)。C++中对象的隐式拷贝是导致很多性能问题和bugs的根源。拷贝构造函数降低了代码可读性,相比按引用传递,跟踪按值传递的对象更加困难,对象修改的地方变得难以捉摸。

    个人感受:和上一项的目的类似,为了避免人为错误!拷贝构造函数本来是为了方便程序员编程了,但是却有可能成为一个坑,为了避免这类问题,不需要拷贝时使用DISALLOW_COPY_AND_ASSIGN,这样在需要调用拷贝构造函数的时候就会报错,减少了人为出错的可能性。C#和Java在这方面就做得比较好,虽然性能上不如C++,但是人为出错的概率减少了很多。当然,使用一定的代码规范,可以在一定程度上减少C++的坑。

    继承

    虽然C++的继承很好用,但是在实际开发中,尽量多用组合少用继承,不懂的去看GoF的《Design Patterns》。

    但重定义派生的虚函数时,在派生类中明确声明其为virtual。这一条是为了为了阅读方便,虽然从语法的角度来说,在基类中声明了virtual,子类可以不用再声明该函数为virtual,但这样一来阅读代码的人需要检索类的所有祖先以确定该函数是否为虚函数o(╯□╰)o。

    多重继承

    虽然允许,但是只能一个基类有实现,其他基类是接口,这样一来和JAVA一样了。这些东西在C#和JAVA中都进行了改进,直接从语法上解决问题。C++的灵活性过高,也是个麻烦的问题,只能通过代码规范填坑。

    接口

    虚基类必须以Interface为后缀,方便阅读。阅读方便。

    重载操作符

    除少数特定情况外,不要重载操作符!!!“==”和“=”的操作Euqals和CopyFrom函数代替,这样更直观,也不容易出错。

    个人感受:看到这一条,我有点惊讶,在学习C++的时候,说重载操作符有神马神马好处,为什么现在又说不要重载操作符呢?仔细看了他的文档,确实说的有道理,导致可能出现的bug见其具体文档。在实际应用中,由于C++的坑实在太多了,不得不把这种“好用”的东西干掉,因为出了bug又找不到,是一件很O疼的事情。

    声明次序

    1)typedefs和enums;

    2)常量;

    3)构造函数;

    4)析构函数;

    5)成员函数,含静态成员函数;

    6)数据成员,含静态数据成员。

    宏 DISALLOW_COPY_AND_ASSIGN 置于private:块之后,作为类的最后部分。

    其他C++特性

    引用参数

    函数形参表中,所有的引用必须的const!

    个人感受:这么做是为了防止引用引起的误解,因为引用在语法上是值,却有指针的意义。虽然引用比较好用,但是牺牲其某些方面的特性,换来软件管理方面的便利,还是很值得了。

    缺省参数

    禁止使用函数缺省参数!

    个人感受:看到这一点的时候觉得有点因噎废食了,其实缺省参数感觉还是蛮好用的。当然从另外一个角度来说,要使用C++就不要怕这种小麻烦,如果因为使用这些特性造成了找不到的bug,那会损失更多时间。

    异常

    不要使用C++异常。

    这一点我没有看懂,也许是因为它的异常机制没有C#和Java那么完善吧……毕竟在C#和Java里面异常还是很好用的东东。

    除了记录日志,不要使用流,使用printf之类的代替。

    这一条其实是有一些争议的,当然大多数人认为代码一致性比较重要,所以选择printf,具体的可以看原文文档。

    const的使用

    在任何可以的情况下都要使用const。

    这条规则赞一个,Doom3的代码规范里也提到了这一条。这么做有两个好处,一个是防止程序出错,因为修改了const类型的变量会报错;另一个就是方便阅读,使代码“自注释”。虽然这么做也有坏处,当然,总体来说利大于弊。

    命名约定

    1、总体规则:不要随意缩写,如果说 ChangeLocalValue 写作ChgLocVal还有情可原的话,把ModifyPlayerName写作MdfPlyNm就太过分了,除函数名可适当为动词外,其他命名尽量使用清晰易懂的名词;

    2、宏、枚举等使用全部大写+下划线;

    3、变量(含类、结构体成员变量)、文件、命名空间、存取函数等使用全部小写+下划线,类成员变量以下划线结尾,全局变量以g_开头;

    4、普通函数、类型(含类与结构体、枚举类型)、常量等使用大小写混合,不含下划线;

    使用这套命名约定,可以使代码具有一定程度的“自注释”功能,方便他人阅读,也方便自己以后修改。当然3、4两点也可以使用其他的命名约定,只要团队统一即可。

    格式

    1、行宽原则上不超过80列,把22寸的显示屏都占完,怎么也说不过去;

    2、尽量不使用非ASCII字符,如果使用的话,参考 UTF-8 格式(尤其是 UNIX/Linux 下,Windows 下可以考虑宽字符),尽量不将字符串常量耦合到代码中,比如独立出资源文件,返不仅仅是风格问题了;

    3、UNIX/Linux下无条件使用空格,MSVC的话使用 Tab 也无可厚非; (我没用过Linux,不懂为什么在Linux下无条件使用空格)

    4、函数参数、逻辑条件、初始化列表:要么所有参数和函数名放在同一行,要么所有参数并排分行;

    5、除函数定义的左大括号可以置于行首外,包括函数/类/结极体/枚举声明、各种语句的左大括号置于行尾,所有右大括号独立成行;

    6、./->操作符前后丌留空格,*/&不要前后都留,一个就可,靠左靠右依各人喜好;

    7、预处理指令/命名空间不使用额外缩进,类/结构体/枚举/函数/语句使用缩进;

    8、初始化用=还是()依个人喜好,统一就好;

    9、return不要加();

    10、水平/垂直留白不要滥用,怎么易读怎么来。

    写在最后

    总的来说,这套代码规范还是相当不错的,既有防止错误使用C++的某些特性而导致bugs的规范,又有代码书写的相关规范使其便于阅读,建议搞C++的童鞋都看一看。当然,具体的团队应该会有具体的代码规范,代码风格方面大家可能会有一些区别;不使用C++某些特性(比如不使用C++异常,禁止使用函数缺省参数)方面,应该按照具体情况进行折中处理,而不应该生搬硬套代码规范;但是“不将字符串常量耦合到代码中”这种规范,是大家必须遵守的。

    转载:https://blog.csdn.net/freeking101/article/details/78930381 方便自己学习,感谢博主

    展开全文
  • 史上最全的Java代码规范

    千次阅读 多人点赞 2018-12-28 21:28:09
    不管学习什么,头脑里要有一定的规范,这样才能形成自己逻辑,命名好自己的代码,也是不但为了自己,而且为了...本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档...

           不管学习什么,头脑里要有一定的规范,这样才能形成自己逻辑,命名好自己的代码,也是不但为了自己,而且为了别人更好的定位你这个人的人品,以及个人的能力。没有学习好的同学,跟着我的脚步,学习Java的命名规范,哦,不仅仅是Java,用到技术,都可以这样命名,来提高你对代码的观赏性。

    Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。

    1. 标识符命名规范

    1.1 概述

    标识符的命名力求做到统一、达意和简洁。

    1.1.1 统一

    统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。

    1.1.2 达意

    达意是指,标识符能准确的表达出它所代表的意义,比如: newSupplier, OrderPaymentGatewayService等;而 supplier1, service2idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是 order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。

    1.1.3 简洁

    简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长, transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。

    1.1.4 骆驼法则

    Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是 supplier_name, add_new_contract

    1.1.5 英文 vs 拼音

    尽量使用通俗易懂的英文单词,如果不会可以向队友求助,实在不行则使用汉语拼音,避免拼音与英文混用。比如表示归档,用archive比较好, pigeonhole则不好,用guiDang尚可接受。

    1.2 包名

    使用小写字母如 com.xxx.settlment,不要 com.xxx.Settlement
    单词间不要用字符隔开,比如 com.xxx.settlment.jsfutil,而不要com.xxx.settlement.jsf_util

    1.3 类名

    1.3.1 首字母大写

    类名要首字母大写,比如 SupplierService, PaymentOrderAction;不要 supplierService, paymentOrderAction.

    1.3.2 后缀

    类名往往用不同的后缀表达额外的意思,如下表:

    后缀名

    意义

    举例

    Service

    表明这个类是个服务类,里面包含了给其他类提同业务服务的方法

    PaymentOrderService

    Impl

    这个类是一个实现类,而不是接口

    PaymentOrderServiceImpl

    Inter

    这个类是一个接口

    LifeCycleInter

    Dao

    这个类封装了数据访问方法

    PaymentOrderDao

    Action

    直接处理页面请求,管理页面逻辑了类

    UpdateOrderListAction

    Listener

    响应某种事件的类

    PaymentSuccessListener

    Event

    这个类代表了某种事件

    PaymentSuccessEvent

    Servlet

    一个Servlet

    PaymentCallbackServlet

    Factory

    生成某种对象工厂的类

    PaymentOrderFactory

    Adapter

    用来连接某种以前不被支持的对象的类

    DatabaseLogAdapter

    Job

    某种按时间运行的任务

    PaymentOrderCancelJob

    Wrapper

    这是一个包装类,为了给某个类提供没有的能力

    SelectableOrderListWrapper

    Bean

    这是一个POJO

    MenuStateBean

     

     

    1.4 方法名

    首字母小写,如 addOrder() 不要 AddOrder()
    动词在前,如 addOrder(),不要orderAdd()
    动词前缀往往表达特定的含义,如下表:

    前缀名

    意义

    举例

    create

    创建

    createOrder()

    delete

    删除

    deleteOrder()

    add

    创建,暗示新创建的对象属于某个集合

    addPaidOrder()

    remove

    删除

    removeOrder()

    init或则initialize

    初始化,暗示会做些诸如获取资源等特殊动作

    initializeObjectPool

    destroy

    销毁,暗示会做些诸如释放资源的特殊动作

    destroyObjectPool

    open

    打开

    openConnection()

    close

    关闭

    closeConnection()<

    read

    读取

    readUserName()

    write

    写入

    writeUserName()

    get

    获得

    getName()

    set

    设置

    setName()

    prepare

    准备

    prepareOrderList()

    copy

    复制

    copyCustomerList()

    modity

    修改

    modifyActualTotalAmount()

    calculate

    数值计算

    calculateCommission()

    do

    执行某个过程或流程

    doOrderCancelJob()

    dispatch

    判断程序流程转向

    dispatchUserRequest()

    start

    开始

    startOrderProcessing()

    stop

    结束

    stopOrderProcessing()

    send

    发送某个消息或事件

    sendOrderPaidMessage()

    receive

    接受消息或时间

    receiveOrderPaidMessgae()

    respond

    响应用户动作

    responseOrderListItemClicked()

    find

    查找对象

    findNewSupplier()

    update

    更新对象

    updateCommission()

    find方法在业务层尽量表达业务含义,比如 findUnsettledOrders(),查询未结算订单,而不要findOrdersByStatus() 数据访问层,find,update等方法可以表达要执行的sql,比如findByStatusAndSupplierIdOrderByName(Status.PAID, 345)

    1.5.1 静态常量

    全大写用下划线分割,如

    1.5.1 静态常量

    全大写用下划线分割,如

    public static find String ORDER_PAID_EVENT = “ORDER_PAID_EVENT”;

    1.5.2 枚举

    全大写,用下划线分割,如

    public enum Events {
    ORDER_PAID,
    ORDER_CREATED
    }

    1.5.3 其他

    首字母小写,骆驼法则,如:

    public String orderName;

    1.6 局部变量名

    参数和局部变量名首字母小写,骆驼法则。尽量不要和域冲突,尽量表达这个变量在方法中的意义。

    2. 代码格式

    用空格字符缩进源代码,不要用tab,每个缩进4个空格。

    2.1 源文件编码

    源文件使用utf-8编码,结尾用unix n 分隔。

    2.2 行宽

    行宽度不要超过80Eclipse标准

    2.3 包的导入

    删除不用的导入,尽量不要使用整个包的导入。在eclipse下经常使用快捷键 ctrl+shift+o 修正导入。

    2.4 类格式

    2.5 域格式

    每行只能声明一个域。
    域的声明用空行隔开。

    2.5 方法格式

    2.6 代码块格式

    2.6.1 缩进风格

    大括号的开始在代码块开始的行尾,闭合在和代码块同一缩进的行首,例如:

    package com.test;
    
    
    
    public class TestStyle extends SomeClass implements AppleInter, BananaInter {
    
        public static final String THIS_IS_CONST = "CONST VALUE";
    
    
    
        private static void main(String[] args) {
    
            int localVariable = 0;
    
        }
    
    
    
        public void compute(String arg) {
    
            if (arg.length() >  0) {
    
                System.out.println(arg);
    
            }
    
    
    
            for (int i = 0; i < 10; i++) {
    
                  System.out.println(arg);
    
            }
    
    
    
           while (condition) {
    
    
    
           }
    
    
    
          do {
    
              otherMethod();
    
          } while (condition);
    
    
    
      switch (i) {
    
      case 0:
    
         callFunction();
    
         break;
    
      case 1:
    
         callFunctionb();
    
         break;
    
      default:
    
         break;
    
      }
    
     }
    
    }

    2.6.2 空格的使用

    2.6.2.1 表示分割时用一个空格

    不能这样:

    if       (               a >        b   )            {
    
        //do something here
    
    };

    2.6.2.2 二元三元运算符两边用一个空格隔开

    如下:

    a + b = c;
    
    b - d = e;
    
    return a == b ? 1 : 0;

    不能如下:

    a+b=c;
    
    b-d=e;
    
    return a==b?1:0;

    2.6.2.3 逗号语句后如不还行,紧跟一个空格

    如下:

    call(a, b, c);

    不能如下:

    call(a,b,c);

    2.6.3 空行的使用

    空行可以表达代码在语义上的分割,注释的作用范围,等等。将类似操作,或一组操作放在一起不用空行隔开,而用空行隔开不同组的代码, 如图:

    order = orderDao.findOrderById(id);
    
    
    
    //update properties
    
    order.setUserName(userName);
    
    order.setPrice(456);
    
    order.setStatus(PAID);
    
    orderService.updateTotalAmount(order);
    
    session.saveOrUpdate(order);

    上例中的空行,使注释的作用域很明显.

    • 连续两行的空行代表更大的语义分割。
    • 方法之间用空行分割
    • 域之间用空行分割
    • 超过十行的代码如果还不用空行分割,就会增加阅读困难

    3. 注释规范

    3.1 注释 vs 代码

    • 注释宜少二精,不宜多而滥,更不能误导
    • 命名达意,结构清晰, 类和方法等责任明确,往往不需要,或者只需要很少注释,就可以让人读懂;相反,代码混乱,再多的注释都不能弥补。所以,应当先在代码本身下功夫。
    • 不能正确表达代码意义的注释,只会损害代码的可读性。
    • 过于详细的注释,对显而易见的代码添加的注释,罗嗦的注释,还不如不写。
    • 注释要和代码同步,过多的注释会成为开发的负担
    • 注释不是用来管理代码版本的,如果有代码不要了,直接删除,svn会有记录的,不要注释掉,否则以后没人知道那段注释掉的代码该不该删除。

    3.2 Java Doc

    表明类、域和方法等的意义和用法等的注释,要以javadoc的方式来写。Java Doc是个类的使用者来看的,主要介绍 是什么,怎么用等信息。凡是类的使用者需要知道,都要用Java Doc 来写。非Java Doc的注释,往往是个代码的维护者看的,着重告述读者为什么这样写,如何修改,注意什么问题等。 如下:

    /**
    
    * This is a class comment
    
    */
    
    public class TestClass {
    
        /**
    
        * This is a field comment
    
        */
    
        public String name;
    
    
    
        /**
    
        * This is a method comment
    
        */
    
        public void call() {
    
    
    
        }
    
    }

    3.3 块级别注释

    3.3.1 块级别注释,单行时用 //, 多行时用 /* .. */

    3.3.2 较短的代码块用空行表示注释作用域

    3.3.3 较长的代码块要用

    /*------ start: ------*/

    /*-------- end: -------*/

    包围
    如:

    /*----------start: 订单处理 ------- */

    //取得dao

    OrderDao dao = Factory.getDao("OrderDao");

    /* 查询订单 */

    Order order = dao.findById(456);

    //更新订单

    order.setUserName("uu");

    order.setPassword("pass");

    order.setPrice("ddd");

    orderDao.save(order);

    /*----------end: 订单处理 ------- */

    3.3.4 可以考虑使用大括号来表示注释范围

    使用大括号表示注释作用范围的例子:

    /*----------订单处理 ------- */

    {

     //取得dao

     OrderDao dao = Factory.getDao("OrderDao");

     /* 查询订单 */

     Order order = dao.findById(456);

     

     //更新订单

     order.setUserName("uu");

     order.setPassword("pass");

     order.setPrice("ddd");

     

     orderDao.save(order);

    }

    3.4 行内注释

    行内注释用 // 写在行尾

    4 最佳实践和禁忌

    4.1 每次保存的时候,都让你的代码是最美的

    程序员都是懒惰的,不要想着等我完成了功能,再来优化代码的格式和结构,等真的把功能完成,很少有人会再愿意回头调整代码。

    4.2 使用log而不是System.out.println()

    log可以设定级别,可以控制输出到哪里,容易区分是在代码的什么地方打印的,而System.out.print则不行。而且,System.out.print的速度很慢。所以,除非是有意的,否则,都要用log。至少在提交到svn之前把System.out.print换成log

    4.3 每个if while for等语句,都不要省略大括号{}

    看下面的代码:

    if (a > b)

        a++;

    如果在以后维护的时候,需要在a > b 时,把b++,一步小心就会写成:

    if (a > b)

        a++;

        b++;

    这样就错了,因为无论ab是什么关系,b++都会执行。 如果一开始就这样写:

    if (a > b)  {

        a++;

    }

    相信没有哪个笨蛋会把b++添加错的。而且,这个大括号使作用范围更明显,尤其是后面那行很长要折行时。

    4.4 善用TODO:

    在代码中加入 //TODO: ,大部分的ide都会帮你提示,让你知道你还有什么事没有做。比如:

    if (order.isPaid()) {
    
        //TODO: 更新订单
    
    }

    4.5 在需要留空的地方放一个空语句或注释,告述读者,你是故意的

    比如:

    if (!exists(order)) {
    
        ;
    
    }
    
    或:
    
    if (!exists(order)) {
    
        //nothing to do
    
    }

    4.6 不要再对boolean值做true false判断

    比如:

    if (order.isPaid() == true) {
    
        // Do something here
    
    }

    不如写成:

    if (order.isPaid()) {
    
        //Do something here
    
    }

    后者读起来就很是 if order is paid, …. 要比 if order’s isPaid method returns true, … 更容易理解

    4.7 减少代码嵌套层次

    代码嵌套层次达3层以上时,一般人理解起来都会困难。下面的代码是一个简单的例子:

    public void demo(int a, int b, int c) {
    
        if (a > b) {
    
            if (b > c) {
    
                doJobA();
    
            } else if (b < c) {
    
                doJobB()
    
            }
    
        } else {
    
            if (b > c) {
    
                if (a < c) {
    
                    doJobC();
    
                }
    
            }
    
        }
    
    }

    减少嵌套的方法有很多:

    • 合并条件
    • 利用 return 以省略后面的else
    • 利用子方法

    比如上例,合并条件后成为:

    public void demo(int a, int b, int c) {
    
        if (a > b && b > c) {
    
            doJobA();
    
        }
    
        if (a > b && c > b) {
    
            doJobB();
    
        }
    
        if (a <= b && c < b && a < c) {
    
            doJobC();
    
        }
    
    }

    如果利用return 则成为:

    public void demo(int a, int b, int c) {
    
        if (a > b) {
    
            if (b > c) {
    
                doJobA();
    
                return;
    
            }
    
            doJobB()
    
            return;
    
        }
    
    
    
        if (b > c) {
    
            if (a < c) {
    
                doJobC();
    
            }
    
        }
    
    }

    利用子方法,就是将嵌套的程序提取出来放到另外的方法里。

    4.8 程序职责单一

    关注点分离是软件开发的真理。人类自所以能够完成复杂的工作,就是因为人类能够将工作分解到较小级别的任务上,在做每个任务时关注更少的东西。让程序单元的职责单一,可以使你在编写这段程序时关注更少的东西,从而降低难度,减少出错。

    4.9 变量的声明,初始化和被使用尽量放到一起

    比方说如下代码:

    int orderNum= getOrderNum();
    
    //do something withou orderNum here
    
    call(orderNum);

    上例中的注释处代表了一段和orderNum不相关的代码。orderNum的声明和初始化离被使用的地方相隔了很多行的代码,这样做不好,不如这样:

    //do something withou orderNum here
    
    int orderNum= getOrderNum();
    
    call(orderNum);

    4.10 缩小变量的作用域

    能用局部变量的,不要使用实例变量,能用实例变量的,不要使用类变量。变量的生存期越短,以为着它被误用的机会越小,同一时刻程序员要关注的变量的状态越少。实例变量和类变量默认都不是线程安全的,局部变量是线程安全的。比如如下代码:

    public class OrderPayAction{
    
        private Order order;
    
    
    
        public void doAction() {
    
            order = orderDao.findOrder();
    
            doJob1();
    
            doJob2();
    
        }
    
    
    
        private void doJob1() {
    
            doSomething(order);
    
        }
    
    
    
        private void doJob2() {
    
            doOtherThing(order);
    
        }
    
    }

    上例中order只不过担当了在方法间传递参数之用,用下面的方法更好:

    public class OrderPayAction{
    
        public void doAction() {
    
            order = orderDao.findOrder();
    
            doJob1(order);
    
            doJob2(order);
    
        }
    
    
    
        private void doJob1(Order order) {
    
            doSomething(order);
    
        }
    
    
    
        private void doJob2(Order order) {
    
            doOtherThing(order);
    
        }
    
    }

    4.11 尽量不要用参数来带回方法运算结果

    比如:

    public void calculate(Order order) {
    
        int result = 0;
    
        //do lots of computing and store it in the result
    
        order.setResult(result);
    
    }
    
    
    
    public void action() {
    
        order = orderDao.findOrder();
    
        calculate(order);
    
        // do lots of things about order
    
    }                                 

    例子中calculate方法通过传入的order对象来存储结果, 不如如下写:

    public int calculate(Order order) {
    
        int result = 0;
    
        //do lots of computing and store it in the result
    
        return result;
    
    }
    
    
    
    public void action() {
    
        order = orderDao.findOrder();
    
        order.setResult(calculate(order));
    
        // do lots of things about order
    
    }

     

    展开全文
  • 代码规范利器-阿里代码规范插件

    千次阅读 2020-06-20 23:36:42
    好的代码规范不管对自己还是对别人都很重要,毕竟大家都不想接手到各种难以读懂的代码。 今天跟大家介绍一下阿里代码规范插件的安装使用以及注意事项。 首先需要在线安装插件到Idea,可以直接在File-> ...

          好的代码规范不管对自己还是对别人都很重要,毕竟大家都不想接手到各种难以读懂的代码。

          今天跟大家介绍一下阿里代码规范插件的安装使用以及注意事项。

          首先需要在线安装插件到Idea,可以直接在File-> Setteings->Plugins->Browse Repositories,在Browse Repositories搜索Alibaba,然后安装重启idea就安装完成了。

          如果无法在线安装,另外也可以通过下载插件的方式离线安装。

          插件下载地址:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines

       

            下载完成后,选择File->Settings->Plugin->Install plugin from disk,安装刚刚下载的插件。

            安装完成后,点击idea的Tools,就能找到阿里编码规约, 然后就可以扫描当前项目,找出存在的问题。

            扫描出来后,项目整体的存在的问题在下方。

             当你卸载来有问题的代码时,鼠标移动到问题代码上也能看到对应的提示。

            最后说说我的使用的经验吧,有一些非Blocker或者Error级别的报错是可以忽略的,因为有些简单的检查可能各有各的看法,不喜欢的检查我们可以在File->Settings->Editor->inspections中取消对这项检查的勾选。

             如果大家不想用这个插件,觉得它挺烦的也可以看看这个插件的电子书,可以重点看看强制的部分,因为这部分一般来说这么写是有bug的。其实代码规范都差不多,如果你有看过<<代码整洁之道>>或者有用过sonar检查之类的,不用这个插件也是没问题的。同时欢迎大家关注"Java自学之路",里面有我全部的分享。

            电子书的下载地址:https://developer.aliyun.com/topic/ebook?utm_content=g_1000115248   

    展开全文
  • Vue开发代码规范

    千次阅读 2019-05-15 07:51:09
    首先说下契机,最近公司发生了几次由于不同人ide格式化差异...虽然由于平时开发除了eslint以外,对相关内容接触不多而碰到了不少坑,但是还是对代码规范以及git有了更深刻理解。 通过查看其它公司制定规范的案例和...
  • 代码规范 代码规范 代码规范 代码规范 代码规范代码规范代码规范
  • python代码规范

    万次阅读 多人点赞 2018-08-16 02:59:29
    为什么要有代码规范? 1.做哪一行都有高低级别之分,别写一行代码就被人鄙视了 2.好的规范会形成好的编码风格,看着熟悉、亲切,心情好 3.增加可读性,易维护,提高工作效率 4.遵循规范,代码会自己写代码 5....
  • C语言代码规范(编程规范)

    千次阅读 多人点赞 2018-11-24 20:45:49
    C语言代码规范(编程规范) 什么叫规范?在C语言中不遵守编译器的规定,编译器在编译时就会报错,这个规定叫作规则。但是有一种规定,它是一种人为的、约定成俗的,即使不按照那种规定也不会出错,这种规定就叫作...
  • C# 代码规范

    千次阅读 2019-07-04 14:25:08
    代码规范主要从命名规范、布局规范、注释规范、代码使用规范四块来解释。 命令规范 变量命名规范 1). 含义,变量一般指局部变量、成员变量、全局变量以及方法中的参数,这些命名要具有 相对应的含义,一般使用...
  • Java基础——java代码规范详细版

    万次阅读 多人点赞 2019-07-03 11:41:57
    本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 ...
  • 代码规范重要吗?很重要很重要,整洁的代码能让你和同事都心旷神怡,也能让你在离职的时候不会被骂.....今天就来讲讲优秀IT人的代码都是如何分层的。 一、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就...
  • JAVA代码规范检查插件

    千次阅读 2018-12-06 09:22:08
    CheckStyle-IDEA是一款提高代码质量,检查代码规范的工具 ,可对用于对java代码规范检查。 点击file -&gt;setting ,进入idea设置页面 打开settings的plugins,点击查找CheckStyle-IDEA安装,如果查找不到,...
  • 代码规范

    千次阅读 2016-10-09 10:21:45
    下面总结一下OC编程中的一些代码规范(苹果官方推荐的)。以OC为示例,但不局限于OC,也可以被当作别的编程语言的开发规范约定(仅需要把OC特有的东西按照你所使用的语言的惯例即可)  参考资料:苹果代码规范 对建议...
  • 1.项目名称全部采用小写,以下划线分割。如my_project 2.目录命名全部采用小写,以下划线分割。... 不要在自动闭合标签结尾处使用斜线(HTML5 规范 指出他们是可选的); 不要忽略可选的关闭标签,例...
  • 阿里巴巴代码规范

    千次阅读 2017-09-29 17:04:28
    本规范均出自阿里巴巴代码规范以及本人日常过程中的积累。由于篇幅有限,本文不予列出阿里巴巴代码规范的所有,仅列出本人觉得对日常使用过程中帮助较大且又是大家容易忽略的问题。 阿里巴巴代码规范:...
  • 程序员必知--代码规范

    万次阅读 2018-11-17 11:21:04
    首先用我之前的博客中的代码举例子 (C语言编程100例): 第一段代码: #include &lt;stdio.h&gt; int main(){ int i, j, n = 0, a[17] = { 0,1 }, l, r; while (n&lt;1 || n&gt;16){ printf(&...
  • 阿里代码规范插件1:在线安装2:离线安装2.1: zip下载2.2: 安装zip包3: 如何使用3.1: 编码规约扫描3.2: 实时的监控开关3.3: 语言的选择3.4: 自定义不合法规则 为了让开发更加方便、更为规范,阿里巴巴基于手册内容,...
  • 嵌入式C语言代码规范

    万次阅读 2019-12-17 16:26:27
    C语言代码规范 参考安富莱C语言编码规范 1.文件与目录 1、文件及目录的命名规定可用的字符集是[A-Z;a-z;0-9;._-]。 2、源文件名后缀用小写字母 .c 和.h。 3、文件的命名要准确清晰地表达其内容,同时文件名应该...
  • 前端代码规范代码提交规范HTML规范CSS规范JavaScript规范注释命名规范运算符其他:Vue 代码规范常规vuex 代码提交规范 每次提交代码时,commit按规范进行备注,如:本次提交新增了新功能:feat: 新增xx功能 code...
  • Google 的 C++ 代码规范

    万次阅读 多人点赞 2017-12-29 13:15:30
    构造函数+Init()函数初始化的方式与只用构造函数的方法相比,对计算机来说他们是没有区别的,但是人是会犯错的,这一条代码规范在某种程度上避免了一些人为错误,这个在开发中特别重要。     拷贝构造函数 ...
  • C#代码规范

    千次阅读 2018-11-29 14:35:31
    方便代码的交流和维护。  2.不影响编码的效率,不与大众习惯冲突。  3.使代码更美观、阅读更方便。  4.使代码的逻辑更清晰、更易于理解。 在C#中通常使用的两种编码方式如下  Camel(驼峰式): 大小写形式-...
  • 前端代码规范(阿里) --- Javascript

    千次阅读 2020-05-17 20:27:03
    不好,不规范代码,让人看了想说mmp, 那我们就来学习一下规范代码怎么写的吧 以下来自B站的学习视频:前端必备-阿里大厂前端开发规范! 五、Javascript规范 (一) 命名 采用小写驼峰命名 lowerCameCase,代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,061,282
精华内容 424,512
关键字:

代码规范