Studio Itachi Unity/C# コーディングポリシー ver1.00
はじめに
このコーディングポリシーは、わたくしZiggyがUnityで使用するC#スクリプトの可読性を高めるために作成したものです。
名前もコーディング規約ではなくてコーディングポリシーとしており、頑張って守っていきましょうという気持ちを込めました。
また、ソロ開発を前提に作っているので、多人数開発でのコード品質の平均化が目的ではありません。
もし参考にされる場合は十分注意してください。
本内容作成時の参考資料
C# のコーディング規則 / Microsoft
Create a C# style guide: Write cleaner code that scales / Unity
リーダブルコードC#: C#で読みやすいコードを書く50の方法 / Amazon
良いコードを書く技術 ── 読みやすく保守しやすいプログラミング作法 / Amazon
目次
①命名規則
- 名称は英語をそのまま記載する。名称には型名を含めたり意味のない名称を付けたり、余計な修飾はしない。
- 名前を付ける際は基本的に以下の表に従う。
項目 記法 品詞 例 クラス名 PascalCase 名詞 EnemyManager、Save メソッド名 PascalCase 動詞 GetDirection、FindTarget メンバ変数 _PascalCase 名詞 _MousePoint、_HitPoint プライベート変数 camelCase 名詞 bulletCounter、sceneName - boolを返すメソッドや変数名は質問文(動詞)を使用する。
例:IsAttacked、isDead、isWalking - 肯定的な名前にして、否定形の名前をつけない。
例:〇isStopped、×isNotMoved
②変数の取り扱い方
- 不要なインスタンスは=null;しておく。もしくはusing(){}でくくり、不要なインスタンスを保持しないようにする。
- Update()内でFind,getComponent,Camera.mainを使わない。Start()やAwake()でインスタンス化して使用する。
- メンバ変数をインスペクターに出すだけなら、publicにせずに[SerializeField]する。
- public変数を使うときは基本[System.NonSerialized]する。
- グローバル変数にのみthis.を頭につける。
③条件判定
- if文を書く際、条件判定が肯定された際の処理を書く。否定の処理はelse側に書く。
- 一つのif文に複数の条件判定を書かない。&&で条件をつなぎたい場合はネストにする。
- ネストが3つ以上重なるならメソッド化する。
- if文に<,>,==といった比較が入る場合、極力メソッド化する。
- 比較する時は変数を左にし、定数を右に書く。
④コメント
- コメントは対処の処理の上に書く。コード行の末尾には書かない。
- メソッドのコメントは//<summary></summary>の中に書く。
※メソッド名マウスオーバーでコメントが出る。 - たくさんコメントが必要な場合、複雑な処理なのでメソッド化する。
- 未実装部分や後でやることは//TODO:に書く。
※VisualStudioのタスク一覧から見れる。
⑤レイアウト
- 1 つの行には 1 つのステートメントのみを記述する。
- 1 つの行には 1 つの宣言のみを記述する。
- 中かっこである { や } は、それぞれ次の行に書き、省略しない。
⑥留意すべき原則
- 簡潔にしておけ、この間抜け!→KISSの原則【Keep it simple, stupid.】
- そんな機能は必要ないって→YAGNIの原則【You Aren't Gonna to Need It.】
- 情報が重複して書かれてはいけない→DRY原則【Don't Repeat Yourself】
- 一つのクラスには、一つの機能のみ持たせる→単一責任の原則(SOLIDの原則より)
⑦参考資料
- クラスの命名時によく使う単語
単語 意味 Manager 管理者 (管理するだけ) Director 監督者 (指示だししたりする) Generator 生成プログラム Controller 制御装置 - メソッドや変数の命名時によく使う単語
単語 反対語 単語 反対語 add remove up down insert delete show hide get set open close start stop source destination begin end increment decrement send receive lock unlock first last old new put get next previous