Socket.D 的协议实现，涉及了很多语言与平台。比如 javascript ，不能有同名的属性和方法，不能有同名的方法；像 python，习惯上用 _ 作命名间隔。

所以定义和申明个规范，为跨语言实现尽量风格统一提供参考。也可以让用户了解情况。

### 一、基本规则

如果可以，直接使用 java 的命名（它是首发语言，方便文档复用）。否则：

* 保持各语言平台的使用风格
  * 大驼峰命名法
  * 小驼峰命名法
  * 下划线命名法
* 取名上，基于 java 的进行变形（java 是首发语言）。如：
  * `getXxxYyy()`  
  * `GetXxxYyy()`
  * `get_xxx_yyy()`
* 名字本身不要变。如：
  * 不要 `xxxYyy()` 变成 `getXxxYyy()`
* 如果 java 本身定义或设计不适合迁移。则：
  * 修改 java 的定义或设计



### 二、关键规范定义


#### 1、方法名规范（设置、增量设置、添加、获取方法）

* 普通设置：`setXxx():void`
* 链式设置：`xxxSet():self`
* 普通放置：`putXxx():void`
* 链式放置：`xxxPut():self`
* 普通添加：`addXxx():void`
* 链式添加：`xxxAdd():self`
* 普通获取：`getXxx()`
* 分组获取：`xxxGet()`
* 简化获取：`xxx()` //目前主要用在"实体"、"消息"、"帧"的接口上


#### 2、指导原则（这个很重要，对命名有较大的影响）

* 外部用的，优先简洁！！！
* 相同意义，风格优先相同

###  三、规范定义缘由（及调整案例）

#### 1、如果主接口是获取

原 java 里可以：

```java
public interface Demo{
    String tag();
}
public class DemoDefault implements Demo{
    String tag;

    public Demo tag(String tag) { //这种风格，在 Builder 模式里算常见
        this.tag = tag;
        return this;
    }

    public String tag() { //它是主接口（优先简洁）
        return this.tag;
    }
}
```

在 js 里就没办法用了，需要改成：

```javascript
//js
class DemoDefault {
    _tag: string; //字段名不能与函数名同

    tagSet(tag: stirng): Demo { //与主接口冲突，改成 tagSet 链式设置风格
        this._tag = tag;
        return this;
    }

    tag(): string { //它是主接口（优先简洁）
        return this._tag;
    }
}
```

```java
//java
public class DemoDefault implements Demo{
    String tag;

    public Demo tagSet(String tag) { //与主接口冲突，改成 tagSet 链式设置风格
        this.tag = tag;
        return this;
    }

    public String tag() { //它是主接口（优先简洁）
        return this.tag;
    }
}
```

#### 2、如果主接口是配置（或设置）

原 java 里可以：

```java
public interface Demo{
    Demo tag(String tag);
}
public class DemoDefault implements Demo{
    String tag;

    public Demo tag(String tag) { //它是主接口（优先简洁）
        this.tag = tag;
        return this;
    }

    public String tag() { //这种风格，在 Builder 模式里算常见
        return this.tag;
    }
}
```

在 js 里就没办法用了，需要改成：

```javascript
//js
class DemoDefault implements Demo {
    _tag: string; //字段名不能与函数名同

    tag(tag: stirng): Demo {  //它是主接口（优先简洁）
        this._tag = tag;
        return this;
    }

    getTag(): string { //与主接口冲突，改成 getTag 普通获取风格
        return this._tag;
    }
}
```

```java
//java
public class DemoDefault implements Demo{
    String tag;

    public Demo tag(String tag) { //它是主接口（优先简洁）
        this.tag = tag;
        return this;
    }
    
    public String getTag() { //与主接口冲突，改成 getTag 普通获取风格
        return this.tag;
    }
}
```
