=======================================================================================
Wings3d コーディングガイドラインの要約 (2011/04/21現在)
=======================================================================================
オリジナル:https://github.com/bjorng/wings/raw/6f243c118c6c0ae5e4d5c3a2b87195d11f3f1a1d/CodingGuidelines

■■■ Erlangプログラミングの効率性を高めるためのいくつかのヒント
・http://www.erlang.org/doc/efficiency_guide/users_guide.html
・日本語訳はこちら	http://erlang.shibu.jp/efficiency_guide/(渋日記さん)

■■■基本的なガイドライン
・既存のコードがどのようになってるかを観察して、周囲に合うようにまねて書こう。
・コンパイル時にエラーは出さないように。
・未定義関数は呼ばないで。
・書いたコードは必ずテストしよう。
・効率より分かりやすさ重視。


■■■具体的なガイドライン

■文字数
・1タブ=スペース8個分、1インデント=スペース4個分(EmacsのErlangモードの初期設定)、混在が難しければスペースのみでもOK。
・一行あたりの文字数の目安は、80文字程度でお願いします。

■コメント文
・% はそれ以降、行末までコメント文とみなされます。%の後に必ず続けて何か書く必要がある。
・行頭 %%は 複数行に渡るコメントを意味し、関数内などで使います。
・行頭 %%%は、タイトル文に相当、複数の関数を用途や機能などで区切るために使う(メイン処理 , サブ処理 etc)。 
・削除する部分は、コメントアウトで済ませない。(もし間違った新規コードを見かけても、一気に修正はせずに、すこしづつ行うこと。)

■関数について
・各関数の定義毎に1つの空行 をおく(1行関数は除く)
・-import()  を使わず、関数名はモジュールからフルネームで記述 Module:Function(Arguments...)  
	分かりやすく書くなら、リストモジュールに由来する関数 ( map/2, reverse/1,  foldl/3  など)にはimport 使ってOK
・既存のAPIとライブラリを活用、楽をするなら車輪の再発明より、既存のものを流用!

■スペースの挿入について
・関数の最初と関数の呼び出し部分で、カンマの後はスペース1つ入れること 例:  g(A, B, C) -> A + g(B, c).
・逆に、項とレコード中のカンマの後は詰めて書くこと。    {ok,[1,2,3]}
・レコード中の 「=」の前後にスペースは入れないで。
	例えば、case句、変数の前にパターンを置いたり、束縛とマッチを同時にする場合→ 例: foo(#edge{vs=Va,lf=Lf}=Rec) ->
・レコードのフィールド定義は複数行に渡るよう、コメント付きで分かりやすくお願いします。

■禁則事項
・組込み関数 lists:keysearch/3の禁止、代わりに lists:keyfind/3 を使ってください。
・組込み関数 size/1 の禁止、代わりに要素数を取得するのに  tuple_size/1 または byte_size/1を使ってください。
・組込み関数 is_record/2の禁止、その代わりマッチさせるレコードを直接記述してください。 例: bar(#we{}=We) ->
・抽象/隠蔽されたデータ型を探査しない

■命名のヒント
・変数名は英大文字から始まる命名になります。
・アトムはアンダースコア「_」または英小文字、関数名は、英小文字から始まる名称になります。
・複数の単語で構成される変数名は、各単語の最初の文字を大文字にして、単語間は詰めて命名ください。例:VariableInCamelCase
・ただし、単語から母音を抜いて省略する類いの命名は避けてください。悪い例: Btn(Buttonの省略形)やMnu(Menuの省略形)	   
・よく使用する変数の名前は短いものにすると、なにかと便利です。
・変数を更新するために、その場限りの変数が沢山必要になったときは、「変数名+連番数字」で 凌ぎましょう。We , We1 , We2 , .....

■論理式
・条件判断に and  と or  の使用は避け、代わりに、ガード内でand の代わりにコンマ。 or の代わりに セミコロンを使ってください。
・ガード外での論理式には、 andso または orelse  の使用を推奨します。
・ガード内で、'andalso'または'orelse' を使う場合は、「,」「 ;」だけでは、あなたの意図が通じない時だけにしてください。
・ '==' と '=:='の違い  
         2 == 2.0 returns 'true'.
         2 =:= 2.0 returns 'false'. (暗黙的)

・「イコールではない」ことを判別するには  '/=' や '=/=' 演算子 を使ってください、
	特別な理由がない限りは、'=/='と'=:='使用することをお勧めします。