极客学院团队出品 · 更新于 2018-11-28 11:00:43

7 特殊的语法规范

7.1 代码不要深度嵌套

嵌套代码表现为在 case/if/receive 语句中又包含着 case/if/receive 语句。这种深度嵌套的编程风格非常糟糕,代码很容易跨越一个屏幕页面,变得难以阅读。应该把大多数代码限定到最多两级缩进的程度。将代码分割为较短的函数可以解决这个需求。

7.2 模块不宜过大

超过 400 行代码的模块实在是太大了。最好用一系列小模块来代替大型模块。

7.3 函数不宜过长

不要让函数代码超过 15 到 20 行。应将大型函数分割为一些小型函数,也不要写把代码行写得过长。

7.4 每一行代码不要写得过长


过长的代码行是不可取的。每行代码最多不宜超过 80 个字符(一张 A4 纸就能容纳得下)。

自 Erlang 4.3 起,字符串常量可以自动连接。比如:

io:format("Name: ~s, Age: ~w, Phone: ~w ~n" 
      "Dictionary: ~w.~n", [Name, Age, Phone, Dict])  

7.5 变量的取名

选择有意义的变量名——尽管这一点很难办到。

如果变量名包含一些单词,使用 _ 或某个大写字母来分隔它们。比如:My_variableMyVariable

对于不会用到的变量(don't care variable),则不要在变量名中间使用 _,而应在变量名加上 _。比如说 _Name。如果将来需要该变量值,则只需去掉变量名前面的下划线即可。这样就不会有确定应替换具体哪个下划线的麻烦,而且代码也易于阅读。

7.6 函数的取名

函数名必须要和函数的功能相符。函数名应能反映出函数所返回的参数类型,不能让阅读代码的人感到诧异。另外,对于常见的函数,应采用常见的名称(比如 startstopinitmain_loop 等)。

对于不同模块中的用来解决相同问题的函数,其函数名应相同。比如,Module:module_info()

糟糕的函数名是最常见的编程错误之一,从而也反映出取一个合适的名称是多么难!

在编写大量不同的函数时,有些命名规范非常有用。比如,名称前缀 is_ 用来标识函数返回原子 true 或 false。

is_...() -> true | false
check_...() -> {ok, ...} | {error, ...}  

7.7 模块的取名

Erlang 具有扁平的模块结构(不会出现模块嵌套的情况)。然而,我们往往希望能够模拟层级式模块结构的效果。通过带有相同模块前缀的相关模块集合可以实现这种结构。

比如,假设有一个 ISDN 处理程序,它是通过 5 个不同且相关的模块实现的,这些模块应该按照如下方式来取名:

isdn_init 
isdn_partb 
isdn_...  

7.8 编程风格要一致

编程风格应该保持一致,这样有助于你和其他人日后理解这些代码。不同的开发人员都有不同编程风格,比如代码缩进、空格的使用,等等。

比如,在写元组时,你可能会用一个单独的逗号来分隔两个元素:

{12,23,45}

而其他人可能会在逗号后面加上一个空格:

{12, 23, 45}

总之,一旦你认准了一种风格,就要坚持使用它。

在一个较大的项目中,所有代码部分的编程风格应保持统一。

上一篇: 几种 Erlang 的特... 下一篇: 文档