我的规范 - 通用规范

本套文章是顺着PHP的WEB开发线路写下来的,所以下面我个人整理出来的代码规范也是针对PHP和JS这些的,请大牛们不要拿C#/JAVA/C++这些来喷我哦呵呵。

这套代码规范2013年从雏形开始修订至今已经实施了许久,其成效已经不用怀疑,项目成员都能较快速地互相阅读对方的代码,但目前还是有一些局限,不至于细到程序怎么设计,所以程序设计思路还不能快速阅读,但至少书写阅读上已经没有困难。

其实可以进一步规范的空间的确还有很多,因为一般脚本语言本身是松散不严谨的,但我这套规范制定下来的中心思想是:

  1. 该按照逻辑思维排版的地方就按照逻辑思维去排版(主要是缩进),满足阅读逻辑。

  2. 参数多的地方以空格隔开以便看清楚一个个参数,防止出现N个不同的值堆在一起混淆视觉难以阅读的情况。

  3. 代码要体现出整洁的风格,让任何参加项目的人都觉得这是个有素质的团队,至少从编码能力上。

然而如果你有更好的建议欢迎在下面回复留言!谢谢!


对违反代码规范者的惩罚声明:

  1. 通过主管设定的方式随机抽取一名部门同事后,需要答应这位同事购买2元到5元之间的东西送给TA,比如一盒纯牛奶!

  2. 手抄相关规范条则3次,情况严重者5到10次(只是抄那一句话,比如"所有if语句块都要用花括号包住",但有的会比较差,包括示例代码也要抄!)


下面是通用规范的正文:

  • 所有代码规范和开发规范等说明在特殊情况下可以特殊处理,视具体情况而定。

  • 文件名和文件夹名用中划线分词。

  • 变量设置初始值的时候,要根据它的使用用途来初始化为不同的值,比如用于存放计数的变量,它的初始值应该是0而不是'',也不能是false

  • 约定变量可以保持原有的约定变量名,不需要另外详细命名(前提是当该作用域没有相同作用的约定变量时,比如只有1个for循环)。

    约定变量就是大部分程序员都惯用的一种变量名,比如for循环里的i j k变量,捕捉异常里的e变量等等;然而PHP的foreach里的$k(就是 $key)。

  • 全部缩进都要尽量使用TAB符而不是空格(一是字节大小问题,二是大部分编辑器都可以设置4个空格字长显示tab符,一般代码编辑/阅读场景下不存在显示不统一的问题)。

  • 等号,双目运算符和三目运算符的两边都要加空格。

    a=1; //错
    a = 1; //对
    	
    a = 1+2; //错
    a = 1 + 2; //对
    	
    a = b?1:2; //错
    a = b ? 1 : 2; //对
    

    运算符加空格隔开运算参数可以使运算表达式阅读起来舒服些,也比较工整,这不仅仅是我个人感受,你看人家开源代码也这样。

  • 一行只写一句代码(但PHP模板文件尽量做到,太短时可以挤在一行,模板里的逻辑块都要有花括号包住)。

    php模板里允许这样将整个 if 写在一行:

    <img<?php if($a == 1){ echo ' class="xxx"'; }?> src="..." />
    

    顺便推荐这样写,开头阅读可能不习惯,但要理解这个意思并上手也不困难:

    <img<?php $a == 1 && print(' class="xxx"'); ?> src="..." />
    
  • if,else,for,while,function里面的代码块要基于外层代码缩进一个tab,并且都要用花括号包住里面的代码(尽管只有1行)。

  • switch里面的case和default关键字也要缩进。

    例子:

    switch(value){
    	case 1:
    		XXXXX
    
    	case 2:
    		YYYYY
    
    	default:
    		ZZZZZ
    }
    
  • 每一块不同作用的工作代码之间要空开一行(这个不好界定,自行把握)。

  • 空函数/方法可以全部写在一行。

  • 用于保存 int、string、bool、array 以外的变量类型初始化赋默认值时,要用null作为默认值。

  • 函数与方法里面的第一行不要多余地拍多一个空行。

  • 变量,函数名,对象方法名都用小写驼峰命名。

  • 字符串都用单引号。

  • 当变量在 if、for、while 等控制结构后面要进行使用,而控制结构内又要对变量做计算的时候,该变量必须在控制结构外面先进行声明并赋予默认值。

    if(a == b){
    	c = 1;
    }
    执行一个函数一个函数//错误! 这里 a 不一定等于 b,所以 c 变量不一定会存在
    
    if(a == b){
    	c = 1;
    }else{
    	c = 2;
    }
    执行一个函数一个函数//错误!虽然有个 else,但是项目开发过程中根据需求的变化,else 可能会被撤销,到时候 $c 就会得不到赋值,一般程序员也不会完全检查这些,就会导致bug发生,所以也不行,必须在if前先声明变量c。
    
    数组//错误!当数组为空数组的时候进不去 for 循环,所以 a 变量不会产生。
    

    while、switch这些控制结构也是类似,请注意。