2012-04-26 69 views
5

Nhóm của tôi đang học một số Erlang trong công việc mới của tôi. Ngay bây giờ chúng tôi có một số mã được thực hiện, nhưng mã đang bắt đầu để có được một chút lộn xộn và không nhất quán.Tiêu chuẩn mã hóa Erlang và các thực hành tốt

Tôi muốn biết nếu có các tiêu chuẩn mã hóa được theo sau bởi cộng đồng Erlang và có thể được sử dụng làm đường cơ sở hay không. Những thứ như cách thụt lề, đặt tên biến và chức năng, cách cấu trúc mô-đun, v.v.

Ngoài ra, có công cụ nào sẽ kiểm tra các thông số đó không? Tôi đang suy nghĩ trong PEP8 hoặc PyFlakes trong thế giới Python. Tôi sử dụng vim và nó sẽ phát hiện lỗi cú pháp, điều này rất hay, nhưng tôi muốn tiến xa hơn một chút và cố gắng giữ một phong cách tốt, nhất quán mà chúng ta có thể chia sẻ và làm cho mã dễ đọc hơn.

CẬP NHẬT: Về nhận xét của Kemal, tôi phải nói điều đó rất thú vị (và chúng tôi sẽ tận dụng nó) nhưng không bao gồm hoàn toàn chủ đề. Vấn đề của tôi là để thuyết phục một nhóm sử dụng kiểu mã nhất quán, nhất quán nhất có thể. Một cách tốt để thuyết phục mọi người là sử dụng kiểu mã hóa được cộng đồng Erlang khuyên dùng. Có lẽ nó không tồn tại, nhưng tôi muốn thử những thứ đơn giản, như việc chọn CameCase trên Underscored_words có thể giúp cung cấp cho mã một cái nhìn nhất quán và giúp dễ đọc.

Trả lời

10

Vâng, đây là http://www.erlang.se/doc/programming_rules.shtml. Nó khá toàn diện.

+1

Mmmm, có vẻ rất mơ hồ.Có nhiều khuyến nghị chung hơn cụ thể cho Erlang cho hầu hết các phần. – Khelben

+2

Âm đạo? Có rất nhiều khuyến nghị cụ thể của erlang ở đó và họ không nhìn "mơ hồ" đối với tôi. – Isac

+2

Tôi đồng ý rằng lời khuyên trong trang đó có lẽ quan trọng hơn số lượng khoảng trống bạn sử dụng. – dsmith

2

Tôi không biết một. Đó là dễ đọc hơn cho bạn? Đây:

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

hay này:

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

hay này:

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

Tôi thích người cuối cùng, nhưng nhất quán là quan trọng nhất. Vì vậy, tôi đề nghị xác định một tiêu chuẩn phù hợp với bạn.

+0

Tôi có thể thích câu hỏi thứ hai, nhưng câu hỏi ở đây là, có sự đồng thuận nào trên cộng đồng Erlang không? – Khelben

+0

Cái thứ hai là cái tôi thích nhất ... Đó có lẽ là lý do không có tiêu chuẩn. – dsmith

2

Có một công cụ gọi là Elvis có thể được sử dụng để thực thi kiểu mã hóa, nhưng quy tắc mặc định là các quy tắc từ Inaka (người tạo) thay vì mặc định cho cộng đồng Erlang nói chung.

+0

Xin chào! Elvis được thiết kế đủ linh hoạt để có thể cấu hình các quy tắc mà bạn muốn áp dụng bằng cách chỉ định 'elvis.config' của riêng bạn. Nó cũng hỗ trợ các quy tắc do người dùng định nghĩa khi nó được chạy từ trình bao và có các kế hoạch để hỗ trợ chúng ngay cả khi chạy nó từ dòng lệnh. Hy vọng nó giúp. –

0

Đối với người tìm kiếm tương lai ...

Hợp tác với các folks lớn đến erlang-questions mailing list (người tặng thời gian của họ để cung cấp những lời chỉ trích gay gắt nếu phù hợp) tôi sản xuất một dự án ví dụ về kích thước vừa phải (một thực hiện UUID đầy đủ) đặc biệt để thể hiện một phong cách dễ đọc, viết và mô phỏng.

Nó bao gồm thực hành mã hóa chung về typespeccing, sử dụng edoc, và bố trí đang Erlang và phong cách:

Vấn đề của tờ khai lambda đa dòng tại chỗ và các vấn đề khác về multiline VS sử dụng nhãn trong nguồn (với so sánh i n mã biên dịch) được giải quyết tại đây: https://zxq9.com/archives/1337.

Các vấn đề liên quan