编码规范

## Javascript 篇
### 命名规范
* `强制` 杜绝完全不规范的缩写,避免望文不知义(随意缩写会严重降低了代码的可阅读性)。

* `强制` 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
> 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。

 > 正例:
	`taobao`、`youku`、`guangzhou`  // 等国际通用的名称,可视同英文。

 > 反例:
	`DaZhePromotion` (打折)  `setPingfen` (评分)

* `强制` `javascript` 方法(函数)名、参数名、变量都统一使用lowerCamelCase风格(小驼峰命名),必须遵从驼峰形式。
 > 正例: localValue / getHttpMessage() / inputUserId

* `强制` 函数命名采用动词 + 名词形式进行命名, 确保望文知义

    > 正例:

    ```js
    isSelected();  // 返回值为bool类型
    canUpdate();  // 返回值为bool类型
    hasNext(); // 返回值为bool类型
    getAccount();  // 返回值为一个Account 对象
    getUserList();  // 返回值为一个 用户列表
    setValue(); // 设置操作
    changeDoctorName(); // 修改医生名称
    ```


* `强制` 类名使用帕斯卡命名`PascalCase`,必须遵从驼峰形式

* `强制` 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
> 正例:MAX_PAGE_COUNT
反例: MAX_COUNT

* `强制` 方法体中的私有变量以下划线`_`开始

### 格式规约
* `强制` 文件必须为`utf-8`格式
* `强制` `if/for/while/switch/do`等保留字与左右括号之间都必须加空格。
* `强制` 大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:

	1. 左大括号前不换行。
	2. 左大括号后换行。
	3. 右大括号前换行。
	4. 右大括号后还有`else`等代码则不换行;表示终止右大括号后必须换行。

	> 正例
	```
	if (condition1) {
	  doSomething1();
	}

	if (condition2) {
	  doSomething2();
	} else {
	  doSomething3();
	}
	```


* `强制` 任何运算符左右必须加一个空格。 说明:运算符包括赋值运算符`=`、逻辑运算符`&&`、加减乘除符号、三目运行符等。

* `强制` 以单引号('')嵌套双引号(""), 优先使用单引号。

* `强制` 语句结尾必须加上分号;

* `强制` 单行内容长度超出(约80个字符)必须多行显示。换行时需遵循以下规则:
	1. 第二行相对一缩进2个空格,从第三行开始不再继续缩进参考示例。
	2. 运算符与下文一起换行。
	3. 方法调用的点符号不要与下文一起换行,放在行尾。
	4. 在多个参数超长,逗号后进行换行。
	5. 在括号前不要换行,见反例。

    > 正例:
	```js
		// 超过80个字符的情况下,换行缩进2个空格
		let _introduction = getDoctorUserInfoState(getState()).
		  personalIntroduction;

		// 参数很多的方法调用可能超过80个字符,换行缩进2个空格
		method(args1, args2, args3, ...,
		  argsX);
			
		// 三目运算式可能超过80个字符,换行缩进2个空格
		 xxxxx运算式xxxx....
		   ? 表达式1
		   :表达式2
		   
	```

	> 反例:
  	```js
		
		// 超过80个字符的情况下,不要在括号前换行
		let _introduction = getDoctorUserInfoState
			(getState()).personalIntroduction;
		// 参数很多的方法调用可能超过80个字符,不要在逗号前换行
		method(args1, args2, args3, ...
		, argsX);
	```

* `强制` 方法参数在定义和传入时,多个参数逗号后边必须加空格。

    > 正例:
    ```js
	// 下例中实参的'a', 后边必须要有一个空格。
	method('a', 'b', 'c');
	```

* `强制` 方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。

 > 说明:没有必要插入多行空行进行隔开。

 > 正例:

 ```js

     if (condition1) {
       for (var i = 0; i < a.length; i++) {
    	 p = a[i];
    	 // 赋值操作
    	 q = a[i+1]; 
    
    	 if (codition2) {
    	   dosomething();  
    
    	 } else if (conditionElse) {
    	   dosomethingElse();
    	   dosomethingElse();
    	   dosomethingElse();
    	 }
       }
     }

```

### 控制语句
* `强制` 在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪一个case为止;在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。

* `推荐` 推荐尽量少用else, if-else的方式可以改写成:

    ```js

    	if(condition){
    	...
    	return obj;
    	}
    	// 接着写else的业务逻辑代码;

    ```
    
    > 说明:如果非得使用if()...else if()...else...方式表达逻辑,`强制` 请勿超过3层。

### 注释规约

* `强制` 类、类属性、类方法的注释必须使用[JSDoc规范](https://ask.dcloud.net.cn/article/129),使用`/**内容*/`格式,不得使用`//xxx`方式。

* `强制` 方法内部单行注释,在被注释语句上方另起一行,使用`//`注释
* `强制` 多行注释内容和*之间有一个空格
> 正例:

```js

    /**
     * 第一行内容
     * 第二行内容
     */  
```

* `强制` 注释掉的代码尽量要配合说明,而不是简单的注释掉。
> 说明:代码被注释掉有两种可能性:
> 1. 后续会恢复此段代码逻辑。
> 2. 永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。

* `强制` 好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免过多过滥的注释。

* `推荐` 注释时如用中文注释,专有名词与关键字请保持英文原文。

### 其他

* 函数的书写规范
	* 函数内变量先声明再使用,声明位置统一放在函数开始位置
	* 函数遵循先声明后调用原则
	* 函数遵循“(只解决一件事)[https://www.cnblogs.com/freephp/p/5094979.html]”原则
	* 函数体内不要存在不同(抽象层级)[https://www.cnblogs.com/MNewLife/p/8496230.html]的函数
	* 函数命名准确描述本函数做的那件事


## CSS 篇

### 命名规范
* `强制` id 与类名使用小写字母,以中划线 - 分隔
* `强制` 元素选择器用小写字母

### 格式规约

* `强制` 文件必须为`utf-8`格式
* `强制` 缩进采用2个空格,禁止使用tab字符。
* `强制` 语句结尾必须加上分号;
* `强制` `:` 与属性值之间需要空格,与属性名之间不需要空格
* `强制` 属性值中的 `,` 后需要空格,`,` 前不需要空格
* `强制` 选择器 `>` `+` `~` 等前后需要空格
* `强制` 选择器与 `{` 之间需要空格
* `参考` `/` 前后需要空格 (安卓会有兼容问题慎用)
    > 正例:
    ```css

    .selector > .wrapper {
      font-family: "Hiragino Sans GB", sans-serif;
      background: rgba(0, 0, 0, 0.5) url(logo.png) no-repeat center / contain;
      height: 100%;
    }
    ```
    
* `强制` 两个选择器属性块之间保留一个空行,代码块注释前与代码块后保留一个空行
    > 正例:
    ```css

    .wrapper {
      height: 100%;
    
      /* 字体相关 */
      font-family: 'DINPro';
      font-size: 16px;
      font-weight: 700;
      background: #000;
    }
    
    .selector {
      height: 100%;
    }
    ```
* `强制` `{` 后需要换行,`}` 前需要换行
* `强制` 16 进制颜色尽量使用简写
* `强制` 不允许有空的规则
* `强制` 属性值 0 后面不要加单位
* `推荐` 减少CSS的层级,尽可能控制在二级,避免超过三级。
* `推荐` 属性声明顺序
    > 影响文档流的属性(比如:`display / position / float / clear / visibility` 等)
    自身盒模型的属性(比如:`width / height / margin / padding / border` 等)
    排版相关属性(比如:`font / line-height / text-align / vertical-align` 等)
    装饰性属性(比如:`color / background / opacity / cursor` 等) 
    CSS3 新特性(比如:`transform / transition / animation` 等)

### 注释规约

* `强制` 统一使用 `/* */` 进行注释, `*`号与注释内容间隔一个空格; 单行注释可位于一个代码行的末尾,与代码间隔一个空格,与注释内容也间隔一个空格
* `强制` 缩进与下一行代码保持一致
不忘初心,不负梦想
原文地址:https://www.cnblogs.com/panrui1994/p/11549691.html