【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
该命名规则为本人总结并计划之后使用的一套规范,参考经典C++规范及golang的命名规范,个人觉得golang在某些命名规范上比较简洁、统一,使人易于理解,借助于现代化的编辑工具,我们不再需要过于繁琐的自说明的命名方式。
命名
- 优秀的命名应当是一贯的、短小的、精确的。
- 所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely。
- 所谓短小,不必多言,当命名过长的时候,读者可能更关注命名本身,而忽视真正的逻辑内容。
- 所谓精确,就是命名达意、易于理解
- 需要注释来补充的命名就不算是好命名。
- 使用可搜索的名称:单字母名称和数字常量很难从一大堆文字中搜索出来。单字母名称仅适用于短方法中的本地变量,名称长短应与其作用域相对应。若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称。
- 做有意义的区分:Product和ProductInfo和ProductData没有区别,NameString和Name没有区别,要区分名称,就要以读者能鉴别不同之处的方式来区分 。
- 函数命名规则:驼峰式命名,名字可以长但是得把功能,必要的参数描述清楚,函数名名应当是动词或动词短语,如postPayment、deletePage、save。并依Javabean标准加上get、set、is前缀。例如:xxx + With + 需要的参数名 + And + 需要的参数名 + …..
- 结构体命名规则:结构体名应该是名词或名词短语,如Custome、WikiPage、Account、AddressParser,避免使用Manager、Processor、Data、Info、这样的类名,类名不应当是动词。
- 接口命名规则:单个函数的接口名以”er”作为后缀,如Reader,Writer。接口的实现则去掉“er”。
首条经验
声明位置与使用位置越远,则命名应当越长。
驼峰式命名法
- 命名规则应该使用 MixedCase
- (不要使用 names_with_underscores)
- 首字母缩写词都应该用大写,譬如ServeHTTP、sceneID、CIDRProcessor。
文件命名规则
文件名全部小写,可以含下划线或连字符,按项目约定命名,且尽量保证文件名明确。比如:
cmd_save_player_info_class.cc
my_use_full_class.cc
定义类的文件名一般是成对出现,如:
foo_bar.h
foo_bar.cc
若是类中含大量内联函数,我们还可使用-ini.h文件,使之文件内容更加清晰,于是又如:
url_table.h
url_table.cc
url-table-ini.h
类型命名规则
类型命名每个单词首字母大写,不含下划线,以名词形式,这对于所有类型命名一样,类结构体,枚举,类定义都是如此。比如:
class MyPalayerManager{
}
struct MyPalayerManager{
}
enum Week{
MON;
WEEK_NUM;
}
如果模块的功能较为复杂、常量名称容易混淆的情况下,为了更好地区分枚举类型,可以使用完整的前缀:
enum PullRequestStatus {
PULL_REQUEST_STATUS_CONFLICT;
PULL_REQUEST_STATUS_CHECKING;
PULL_REQUEST_STATUS_MERGEABLE;
}
常量
常量均需使用全部大写字母组成,并使用下划线分词:
const int APP_VER = "1.0";
变量
变量名一律采用驼峰式命名规则,例如:
int playerID;
string tableName;
变量命名基本上遵循相应的英文表达或简写,在相对简单的环境(对象数量少、针对性强)中,可以将一些名称由完整单词简写为单个字母,例如:
- user 可以简写为 u
- userID 可以简写 uid
- 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头:
bool isExist;
bool hasConflict;
bool canManage;
bool allowGitHook;
类成员变量
私有成员变量首字母小写,公有成员变量首字母大写,(此条规则是基于一般不会有public的成员变量,大多数是以static形式提供类成员变量),比如:
class Player{
public:
int PlayerID;
static Player PlayerInst;
private:
string playerName;
}
全局变量
首字母大写,全局static变量首字母小写,比如 :
int SystemTime;
static int systemTime;
局部变量
- 局部变量应当尽可能短小,譬如使用buf指代buffer,使用idx指代index
- 在很长的函数中可能会有很多的变量,这个时候可以适当使用一些长名字,但是写出这么长的函数,通常意味着代码需要重构了!
变量命名惯例
变量名称一般遵循驼峰法,但遇到特有名词时,需要遵循以下规则:
下面列举了一些常见的特有名词:
- 如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient
- 其它情况都应当使用该名词原有的写法,如 APIClient、repoID、UserID
- 错误示例:UrlArray,应该写成urlArray或者URLArray
// A GonicMapper that contains a list of common initialisms taken from golang/lint
var LintGonicMapper = GonicMapper{
"API": true,
"ASCII": true,
"CPU": true,
"CSS": true,
"DNS": true,
"EOF": true,
"GUID": true,
"HTML": true,
"HTTP": true,
"HTTPS": true,
"ID": true,
"IP": true,
"JSON": true,
"LHS": true,
"QPS": true,
"RAM": true,
"RHS": true,
"RPC": true,
"SLA": true,
"SMTP": true,
"SSH": true,
"TLS": true,
"TTL": true,
"UI": true,
"UID": true,
"UUID": true,
"URI": true,
"URL": true,
"UTF8": true,
"VM": true,
"XML": true,
"XSRF": true,
"XSS": true,
}
参数
函数的参数和局部变量类似,但是它们默认还具有文档的功能
当参数类型具有描述性的时候,参数名就应该尽可能短小:
int AfterFunc(Duration d);
int Escape(Player p);
当参数类型比较模糊的时候,参数名就应当具有文档的功能:
int Unix(int sec, int nsec);
bool HasPrefix(string s, string prefix);
函数命名规则
常规函数每个单词首字母大写,使用命令式语气,比如:
int OpenFile(const string f);
bool CheckFileName(const string f);
成员函数,公有函数首字母大写,私有函数首字母小写,比如:
class Player{
public:
void OpenFile(const string f);
private:
void openFile(const string f);
};
名字空间命名
命名空间首字母大写,比如:
namespace Network;
宏
如果你一定要用到宏,全大写加下划线,比如:
#define PI_ROUND 3.0
来源:oschina
链接:https://my.oschina.net/u/3714700/blog/1627145