2012-04-26 1 views
5

Mein Team lernt etwas Erlang in meinem neuen Job. Im Moment haben wir einen Code erstellt, aber der Code beginnt ein wenig unordentlich und nicht konsistent zu werden.Erlang Kodierungsstandards und gute Praktiken

Ich würde gerne wissen, ob es Codierungsstandards gibt, die von der Erlang-Community verfolgt werden und als Basis verwendet werden können. Dinge wie Einrücken, Benennung von Variablen und Funktionen, Strukturieren von Modulen usw.

Gibt es auch ein Werkzeug, das diese Parameter überprüft? Ich denke in PEP8 oder PyFlakes in der Python-Welt. Ich benutze vim und es wird Syntaxfehler erkennen, was nett ist, aber ich möchte es ein wenig weiter bringen und versuchen, einen guten, konsistenten Stil beizubehalten, den wir teilen können und den Code lesbarer machen.

UPDATE: Über den Kommentar von Kemal, ich muss sagen, dass ist sehr interessant (und wir werden es gut nutzen), aber deckt das Thema nicht vollständig ab. Mein Problem ist überzeugt ein Team einen konsistenten Code-Stil zu verwenden, so konsistent wie möglich. Eine gute Möglichkeit, jeden zu überzeugen, ist ein Codierungsstil, der von der Erlang-Community empfohlen wird. Vielleicht existiert es nicht, aber ich würde gerne so einfache Dinge ausprobieren, wie die Wahl von CameCase über Underscoreed_words kann erheblich dazu beitragen, den Code einheitlich zu gestalten und die Lesbarkeit zu verbessern.

Antwort

10

Nun, es gibt diese http://www.erlang.se/doc/programming_rules.shtml. Es ist ziemlich umfassend.

+1

Mmmm, es sieht sehr vage aus.Gibt es allgemeinere Empfehlungen als spezifisch für Erlang? – Khelben

+2

Vage? Es gibt viele erlangspezifische Empfehlungen und sie sehen für mich nicht "vage" aus. – Isac

+2

Ich stimme zu, dass der Hinweis auf dieser Seite wahrscheinlich wichtiger ist als die Anzahl der von Ihnen verwendeten Leerzeichen. – dsmith

2

Ich weiß nicht von einem. Was ist für dich besser lesbar? Dies:

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

oder dies:

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

oder dies:

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

Ich mag die letzte, aber die Konsistenz ist am wichtigsten. Also schlage ich vor, einen Standard zu definieren, der für Sie arbeitet.

+0

Ich bevorzuge wahrscheinlich die zweite, aber die Frage ist, gibt es einen Konsens über die Erlang-Community? – Khelben

+0

Der zweite ist der, den ich am wenigsten mag ... Das ist wahrscheinlich der Grund, warum es keinen Standard gibt. – dsmith

2

Es gibt ein Tool mit der Bezeichnung Elvis, das zum Erzwingen eines Codierungsstils verwendet werden kann, aber die Standardregeln sind die von Inaka (die Ersteller) und nicht die Standardwerte für die Erlang-Community als Ganzes.

+0

Hallo zusammen! Elvis ist so flexibel, dass Sie die gewünschten Regeln konfigurieren können, indem Sie Ihre eigene 'elvis.config' angeben. Es unterstützt auch benutzerdefinierte Regeln, wenn es von der Shell aus ausgeführt wird, und es ist geplant, sie auch bei Ausführung über die Befehlszeile zu unterstützen. Ich hoffe es hilft. –

0

Für zukünftige Forscher ...

In Zusammenarbeit mit den großen Völkern auf den erlang-questions mailing list (die ihre Zeit vernichtende Kritik zu liefern gespendet gegebenenfalls) ich ein Beispielprojekt von mittlerer Größe hergestellt (eine vollständige UUID Implementierung), die speziell um einen Stil zu verkörpern, der leicht zu lesen, zu schreiben und zu emulieren ist.

Es umfasst allgemeine Codierung Praktiken in Bezug auf typespeccing, edoc Verwendung und Erlang Code-Layout und Stil:

Das Problem der In-Place-Multi-Line-Lambda-Deklarationen und andere mehrzeilige Probleme VS Verwendung von Etiketten in der Quelle (mit Vergleichen i n kompilierter Code) ist hier adressiert: https://zxq9.com/archives/1337.