======================================================================================= 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'. (暗黙的) ・「イコールではない」ことを判別するには '/=' や '=/=' 演算子 を使ってください、 特別な理由がない限りは、'=/='と'=:='使用することをお勧めします。