Erlang编码标准和良好实践

时间:2012-04-26 13:19:19

标签: coding-style erlang

我的团队正在新工作中学习一些Erlang。现在我们已经制作了一些代码,但是代码开始变得有些混乱而且不一致。

我想知道Erlang社区是否遵循编码标准并且可以用作基线。诸如如何缩进,变量和函数的命名,如何构造模块等等。

此外,是否有任何工具可以检查这些参数?我正在思考Python世界中的PEP8或PyFlakes。我使用vim并且它会检测语法错误,这很好,但是我想更进一步,并尝试保持一个良好,一致的样式,我们可以共享并使代码更具可读性。

更新:关于凯末尔的评论,我必须说这很有意思(我们会很好地利用它)但不完全涵盖这个主题。我的问题是说服团队使用一致的代码样式,尽可能保持一致。说服每个人的一个好方法是使用Erlang社区推荐的编码风格。也许它不存在,但我想尝试简单的事情,比如选择CameCase over Underscored_words可以极大地帮助给代码一致的外观并帮助提高可读性。

4 个答案:

答案 0 :(得分:10)

嗯,有http://www.erlang.se/doc/programming_rules.shtml。它非常全面。

答案 1 :(得分:2)

我不知道一个。哪个更易读?这样:

init([]) ->
   AChild = {'AName',{'AModule',start_link,[]},
         permanent,2000,worker,['AModule']},
   {ok,{{one_for_all,0,1}, [AChild]}}.

或者这个:

init([]) ->
   AChild = {
      'AName',
      {'AModule', start_link, []},
      permanent,
      2000,
      worker,
      ['AModule']
   },
   {
      ok, 
      {
         {one_for_all,0,1}, 
         [AChild]
      }
   }.

或者这个:

init([]) ->
   AChild = { 'AName'
            , {'AModule', start_link, []}
            , permanent
            , 2000
            , worker
            , ['AModule'] }
   { ok, 
      { {one_for_all,0,1}
      , [AChild] } }.

我喜欢最后一个,但一致性是最重要的。所以我建议定义一个适合你的标准。

答案 2 :(得分:2)

有一个名为Elvis的工具可用于强制执行编码样式,但默认规则是来自Inaka(创建者)的规则,而不是整个Erlang社区的默认规则。

答案 3 :(得分:1)

对于未来的搜索者......

erlang-questions mailing list上的大人们合作(他们捐出时间在适当情况下发表严厉批评)我制作了一个中等规模的示例项目(一个完整的UUID实现),专门用来体现一种简单的风格读,写和模拟。

它涵盖了类型规范,edoc使用和Erlang代码布局和样式方面的一般编码实践:

就地多行lambda声明和其他多行问题的问题VS在源代码中使用标签(在编译代码中进行比较)在此处讨论:https://zxq9.com/archives/1337