这里陆陆续续添加一些自己总结或借鉴的erlang代码规约
[强制] [推荐] [建议]
=============================
命名
原则—— 命名首先应该清晰,然后才是简洁
模块名:
[强制] 除了像util, time_util, list_util这种通用的util模块外, 项目里其他模块的名字都要统一加上前缀,如: xs_......
函数名:
变量名:
[强制] 函数内变量更新“赋值”,后缀序号不取1,而是直接从2开始(1不如2明显,而且容易和字母 l 混淆)
反例: Player1 = Player#player{exp = ...},
% 此处是一些逻辑处理
Player2 = Player1#player{lv = ...},
正例: Player2 = Player#player{exp = ...},
% 此处是一些逻辑处理
Player3 = Player2#player{lv = ...},
宏名:
进程字典的key名:
[推荐]
============================
函数相关
1. [推荐] 除非有充分的理由, 否则不要拿“参数匹配某个特定值”这种做法来代替业务逻辑的case或if 判断(这种写法不直观清晰,不便于代码阅读和维护)
反例:
foo(#player{last_save_time=0}) ->
% 执行last_save_time为0时的处理
% ...;
foo(#player{last_save_time=LastSaveTime}) ->
% 执行last_save_time不为0时的处理
% ...
正例: 宁可直接在foo()函数里写case LastSaveTime == 0 of的判断, 更好的则是封装一些判断的小函数, 然后调用这些小函数。
===========================================================
进程字典
1. [强制] 进程字典的get, put调用,必须加erlang: 前缀,避免和自定义的函数混淆,也更清晰。
反例: get(xxx), put(xxx, yyy)
正例: erlang:get(xxx), erlang:put(xxx, yyy)
======================================================
注释
1. [强制]
所有位于行末的注释,统一用%(一个%)
模块(包括头文件,配置文件)开头的模块说明,用%%%(三个%)作为注释
函数定义处的函数说明,用%%(两个%)作为注释, 函数内部统一用%(一个%)作为注释
记录体定义处的记录体说明,用%%(两个%)作为注释, 记录体内部统一用%(一个%)作为注释
宏定义处用%%(两个%)作为注释,但如果注释是位于行末,则用%(一个%)
===========================================
头文件
1. [强制] 避免头文件被重复包含的写法,统一如下:
假设有一个player.hrl文件,则:
-ifndef(__PLAYER_HRL__).
-define(__PLAYER_HRL__, 0).
.........
-endif.