0
3

マイクロソフトのコーディング規約を読んで考えた事などのメモ

Last updated at Posted at 2024-07-10

この記事について

自分用に命名規則をまとめたメモです。
誤字脱字や間違っている部分があればコメントにてご指摘ください。

またよくわからなかった部分には🐹?がついています。
ご迷惑をおかけしますが有識者の方、教えていただけると幸いです。

インターフェースの先頭名はIで始める

public interface ITest

属性型にはAttributeという単語をつけて終わる

Attributeを継承しているクラスの最後にAttributeをつける
上のクラスを利用しているクラスにはAttributeは必要ない

public class TestAttribute : Attribute

列挙型はフラグとして使うかどうかで命名を分ける

  • フラグじゃない時は単数名詞にする(通常の使い方)
public enum Name
{
    A, 
    B, 
    C
}
  • フラグを利用する時は複数形の命名にする🐹?
[Flags]
public enum Names
{
    A = 0, 
    B = 1, 
    C = 2
}

連続して2回_を使わない

悪い例

public class Test
{
    int __num;
    string test__Name; 
}

良い例

public class Test
{
    int _num = 0;
    string _testName;
}

連続して2回_を利用すると内部識別子と衝突する可能性があるらしい🐹?

変数、メソッド、クラスには分かりやすい名前を使う

悪い例 (極端な例しか思いつかなかった...)

public class P_Move
{
    float ms = 0.0f;

    public void CMS(float cms)
    {
        ms = cms;
    }
}

良い例

public class PlayerMove
{
    float currentMoveSpeed = 0.0f;

    public void ChangeMoveSpeed(float changeMoveSpeed)
    {
        currentMoveSpeed = changeMoveSpeed;
    }
}

簡潔さを優先する

冗長なコードは避ける、また分かりやすさも意識する事。

  • boolの判定

悪い例

if(isJump == true)

良い例

if(isJump)
  • クラス、メソッド、変数名を分かりやすくする(既に書いたのでスキップ)

確認にする

  • 分かりやすい処理のコメントは避ける

悪い例

// 1 + 1 を行っている
int a = 1 + 1;

良い例

int a = 1 + 1;

見るだけで分かるコードのコメントはなるべく避けよう。
ただし、複雑な処理や仕組みを理解していないと分からない処理はコメントを書くことを
推奨します。

  • ifのネストを深くしない

悪い例

 if (!isDeath)
 {
     if (isDodge)
     {
         if (isJump)
         {
             if (isAttack)
             {

             }
         }

         if (isAttack)
         {
             if (isJump)
             {

             }
         }
     }
 }

良い例 早期リターンやメソッド分割を利用する

 public void Dodge()
 {
     if (isDeath)
     {
         return;
     }

     if (isDodge)
     {
         Jump();
         Attack();
     }
 }

 public void Jump()
 {
     if (isJump)
     {
         if (isAttack)
         {

         }
     }
 }

 public void Attack()
 {
     if (isAttack)
     {
         if (isJump)
         {

         }
     }
 }
  • 似たような処理は共通化する

悪い例

int currentHP;

void damage()
{
    currentHP -= 10;
}

void heal()
{
    currentHP += 10;
}

void poison()
{
    currentHP -= 5;
}

良い例

int currentHP;

void ChangeHP(int changeHP)
{
    currentHP = changeHP;
}

クラス名とメソッドにはパスカルケースを使う

先頭を大文字にして、それ以降単語の始まりを大文字にする
例えるとこんな感じになります → PlayerMove
単語が切り替わった時に、その単語の先頭を大文字にすれば大丈夫です。

public class PlayerMove
{
    void Move()
    {

    }
}

メソッド引き数とローカル変数にはキャメルケースを使う

上と違い先頭を小文字にしてそれ以降の単語の始まりを大文字にします。
例えるとこんな感じです → playerMove
上のパスカルケースと違い最初の単語を小文字にしていますがそれ以降は上と同じです。

※あまり関係のないメモ
キャメルケースという名前は、変数がラクダのコブみたいに見えるためキャメルケースと名付けられたとか。また上のパスカルケースの事をアッパーキャメルケースとも呼ぶらしいです。

int moveSpeed;
int currentHP;

定数にはパスカルケースを使う

確認する

enum Action
{
    Idle,
    Move,
}

const int MaxHp = 100;
readonly int MaxSpeed = 5;

プライベート変数は_で始まり残りはキャメルケース

確認する
プライベート変数が定数の場合、定数を強調するためにこの命名は適用しない。

int _currentHP;
float _moveSpeed;

静的フィールドの先頭にs_をつける🐹?

あまり見かけない気がするけどどうなんだろう...?

static int s_num;
0
3
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3