各プログラミング言語のコーディング規約まとめ

# 各プログラミング言語のコーディング規約まとめ

## 各プログラミング言語のコーディング規約/スタイルについてのリンク

### Java

* [Java コーディング標準 - オブジェクト倶楽部](http://objectclub.jp/community/codingstandard/CodingStd.pdf)
* [Google Java Style](http://google-styleguide.googlecode.com/svn/trunk/javaguide.html)
* [Java セキュアコーディングスタンダード](https://www.jpcert.or.jp/java-rules/)

### Python

* [Google Python スタイルガイド](http://works.surgo.jp/translation/pyguide.html)
* [PEP8 日本語訳](http://pep8-ja.readthedocs.org/ja/latest/)

### Ruby

* [Rubyコーディング規約](http://shugo.net/ruby-codeconv/codeconv.html)
* [RubyCodingStyle](http://www.loveruby.net/w/RubyCodingStyle.html)
* [fortissimo1997/ruby-style-guide](https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md)

### JavaScript

* [Google JavaScript Style Guide 和訳](http://cou929.nu/data/google_javascript_style_guide/)
* [Google JavaScript スタイルガイド - 日本語訳](http://www38.atwiki.jp/aias-jsstyleguide2/pages/1.html)
* [JavaScript coding standards | Drupal.org](https://www.drupal.org/node/172169)
* [JavaScript style guide | MDN](https://developer.mozilla.org/ja/docs/JavaScript_style_guide)

### C# 

* [C# のコーディング規則 (C# プログラミング ガイド) | Microsoft](https://msdn.microsoft.com/ja-jp/library/ff926074.aspx)

### Swift

* [Swiftコーディング規約@Wantedly](http://qiita.com/susieyy/items/f71435cc962e70d81b37)
* [github/swift-style-guide](https://github.com/github/swift-style-guide)
* [github/swift-style-guide - 日本語訳](https://github.com/jarinosuke/swift-style-guide/blob/master/README_JP.md)
* [raywenderlich.com 公式のSwiftスタイルガイド](https://github.com/dekatotoro/swift-style-guide/blob/master/ja_style_guide.md)

### Scala

* [Scalaスタイルガイド](http://yanana.github.io/scala-style/)
* [Effective Scala](http://twitter.github.io/effectivescala/index-ja.html)

### Erlang

* [Programming Rules and Conventions [erlang]](http://teahut.sakura.ne.jp/b/2008-06-25-2.html)

### Haskel

* [コードを短く書くことと読みやすく書くことは違う | Oh, you `re no (fun _ → more)](http://d.hatena.ne.jp/camlspotter/20110117/1295244784)

### SQL

(データベース言語だけど一応)

* [SQLプログラミング作法](http://www.geocities.jp/mickindex/database/db_manner.html)

## 一般的なコーディング規約で規約とされてるもの

### 用語説明

| 単語 | 意味 |
| --- | ---|
| 丸括弧<br> (パーレン/parentheses) | `()` |
| 角括弧<br> (ブラケット/スクエアブラケット/square bracket) | `[]` |
| 波括弧<br>（カール/curl） | `{}` |
| 山括弧<br>（アングルブラケット/angle bracket）| `<>` |
| キャメルケース | 複合語の先頭を小文字から始める<br>`cordingGuideLine` |
| パスカルケース | 複合語の先頭を大文字から始める<br>`CordingGuideLine` |
| スネークケース | 複合語の区切りをアンダーバー(`_`)で繋げる<br>`cording_guide_line`<br>`CORDING_GUIDE_LINE` |
| チェインケース | 複合語の区切りをハイフン(`-`)で繋げる<br>`cording-guide-line` |

### エンコーディング

* 基本的にUTF-8一択

## インデント

### 文字種別

`タブとスペースを組み合わせるような使い方はしない、どちらかで統一する`

* タブ
* スペース

### インデント幅

* 2
* 4

### 末尾のセミコロン

#### 必須な言語

* 必要なので書く
* 1行につき1つ

#### 不要な言語

* 必要とされる場合を除き一切書かない

### インポート文

#### 記述箇所

* ファイルの先頭
* モジュールコメントの直後

#### 宣言順

* 次の順番でグループ化する
    - 標準ライブラリ
    - サードパーティに関するもの
    - ローカルなアプリケーション/ライブラリに特有のもの
* 各グループ単位で英数字でソートした順番とする

### 一行の桁数

* 80〜100行

### 命名規約

* 単語の省略は原則行わない
* ローカルの狭いスコープ内の変数名は例外として省略する場合もある

#### 略語の扱い

どちらか2パターン

* 略語で使われてる大文字をそのまま命名でも大文字として表現する
* 略語で大文字が使われてるとしても各命名規約に則る

### ファイル名

* publicクラスはそのクラス名で1ファイルとする
* 例外としてprivateクラスはpublicクラスのファイル内に含めても良い

### プログラミング的概念

言語それぞれで最適な書き方が変わるので内容については割愛

* パッケージ
* クラス
* 構造体
* インターフェース
* トレイト
* メソッド
* プロパティ
* フィールド
* アノテーション
* 型
* タプル
* ジェネリクス
* クロージャ/ラムダ式
* 例外