Erlang编码规范和良好实践

6

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

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

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

更新:关于Kemal的评论,我必须说这非常有趣(我们将好好利用它),但并没有完全涵盖这个主题。我的问题是要说服一个团队使用一致的代码风格,尽可能一致。说服每个人的一个好方法是使用Erlang社区推荐的编码风格。也许它不存在,但我想尝试一些简单的事情,比如选择CameCase而不是Underscored_words,可以大大帮助给代码一个一致的外观并有助于可读性。


Kemal Fadillah、grahamrhay、zxq9 - 抱歉给你们点了踩,但即使链接资源很有用,如果链接失效了,你们的答案就不再有用了。不过我认为dsmith的贡献值得表扬,因为他的例子可能不是来自“官方”来源,但他花费了时间和精力以清晰明了的方式提供了例子,并给出了一般性的建议。 - toraritte
1
从zxq9的回答中:“erlang-questions邮件列表上的伟大人们合作(他们捐出了时间,在适当的时候提供了严厉的批评,参见线程),我制作了一个中等规模的示例项目(完整的UUID实现),特别是为了体现一种易于阅读、编写和模拟的风格。它涵盖了类型规范、edoc使用以及Erlang代码布局和样式方面的一般编码实践:”(续在下一条评论中) - toraritte
1
继续zxq9的回答:“*入门文章:https://zxq9.com/archives/1293 项目:https://github.com/zxq9/zuuid 文档:http://zxq9.com/projects/zuuid/docs/ 在源代码中使用标签解决了多行lambda声明和其他多行问题与使用标签的比较(并附有编译后代码的比较):https://zxq9.com/archives/1337.*” - toraritte
3个回答

10

1
嗯,看起来非常模糊。大多数情况下,这是更通用的建议,而不是特定于Erlang的建议。 - Khelben
2
含糊不清?那里有许多关于Erlang的具体建议,对我来说它们看起来并不“含糊不清”。 - Isac
2
我同意该页面中的建议可能比你使用多少空格更重要。 - dsmith
这个链接似乎已经不存在了,你知道是否有更新的链接吗? - Josh K
1
@JoshK 感谢上帝,它已经被存档在Wayback机器上了。我已经更新了答案中的链接。 - Kemal Fadillah

3
我不知道有没有这样的东西。哪个更容易阅读呢?是这个吗:
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] } }.

我喜欢最后一个,但是一致性最为重要。因此,我建议定义一个适合您的标准。


我可能更喜欢第二个,但问题是,在Erlang社区中是否有任何共识? - Khelben
1
第二个是我最不喜欢的...这可能就是没有标准的原因。 - dsmith

2

有一个名为Elvis的工具可用于强制执行编码风格,但默认规则是由创建者Inaka而非整个Erlang社区的默认规则。


1
你好!Elvis 被设计成足够灵活,可以通过指定自己的 elvis.config 来配置所需应用的规则。当从 shell 运行时,它还支持用户定义的规则,并计划在从命令行运行时也支持它们。希望这有所帮助。 - juan.facorro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接