カテゴリー : .NETの命名規則

 

シンボリック定数に列挙型を利用する

前回は「シンボリック定数によるマジックナンバーの置き換え」を投稿しましたが、.NETではシンボリック定数を列挙型で表現できます。
 
以下のように処理ステータスを表わす列挙型を宣言します。
 
    // 処理ステータス
    public enum ProcessingStatus : int
    {
        // 停止
        Stop = 0,
 
        // 実行中
        WhileRunning
    }
 
問題のあったif文を列挙型を用いて書き直すと、
 
リファクタリング前
    if (status == 0)
    {
        // 停止の場合の処理
    }
    else if (status == 1)
    {
        // 実行中の場合の処理
    }
 
リファクタリング後
    if (status == ProcessingStatus.Stop)
    {
        // 停止の場合の処理
    }
    else if (status == ProcessingStatus.WhileRunning)
    {
        // 実行中の場合の処理
    }
 
となります。
 
シンボリック定数が長くなり少し冗長に感じますが、この列挙型は処理ステータスを表わす全ての処理で利用できますので、列挙型を用いたほうがプログラムの保守性が向上します。
 

メソッド名に使用する動詞

メソッド名に使用する動詞を例示します。
 
CRUD
 
作る
 Create
 
読む
 Read
 
更新する
 Update
 
消す
 Delete
 
アクセサー
 
取得する
 Get
 
設定する
 Set
 
ファイル入出力
 
オープンする
 Open
 
クローズする
 Close
 
読む
 Read
 
書く
 Write
 
探す
 Seek
 
DB入出力
 
検索する
 Select
 
挿入する
 Insert
 
更新する
 Update
 
削除する
 Delete
 
文字列制御
 
探す
 Find
 
置換する
 Replace
 
合う
 Match
 
存在する
 Exist
 
含む
 Contain
 
処理制御
 
実行する
 Execute
 
 
 
 Do
 
繰り返す
 Repeat
 
初期化する
 Initialize
 
始める
 Start
 
止める
 Stop
 
中断する
 Abort
 
待つ
 Wait
 
メモリ制御
 
確保する
 Allocate
 
解放する
 Free
 
画面制御
 
表示する
 Show
 
隠す
 Hide
 
描画する
 Draw
 
印字する
 Print
 
有効にする
 Validate
 
無効にする
 Invalidate
 
元に戻す
 Undo
 
計算
 
計算する
 Calculate
 
足す
 Add
 
引く
 Subtract
 
掛ける
 Multiply
 
割る
 Divide
 
数える
 Count
 

1文字の変数名

変数名には、「名詞・名詞句または形容詞」を使用することが原則ですが、ローカル変数でかつ狭いスコープ(20~30行くらいまで)で使用する変数には、1文字の変数名を許可します。
 
以下によく使われる1文字の変数名を例示します。
 
i:for文のループ変数
j:for文のループ変数(2重ループ)
k:for文のループ変数(3重ループ)
3重ループ以上は「メソッドの抽出」などのリファクタリングをした方がよいでしょう。
 
n:int型を格納する一時変数
c:char型を格納する一時変数
s:string型を格納する一時変数
b:bool型を格納する一時変数
o:object型を格納する一時変数
 
x:X座標を格納する一時変数
y:Y座標を格納する一時変数
z:Z座標を格納する一時変数
 

bool型変数名、プロパティ名の命名規則

bool型の変数名やプロパティ名には、「trueの意味を明確にした名前」をつけることが重要です。
 
bool型でよく使われる命名規則にis(~か)、can(~できるか)、has(~をもつか)から始めるというものがあります。
 
「isEmpty」、「canExecute」、「hasChildren」などと命名すると、trueが何を意味するのかが明確です。
 
もちろん全てにis、can、hasを付ける必要はなく、「exists」、「enabled」などは単語でtrueが何を意味するのかが明確なので、よい変数名といえます。
 
ただし否定的な変数名は禁止です。notFoundなどと命名すると、falseが何を意味するのかが直観的に分かりません。
 

パラメーター名の命名規則

パラメーター名はキャメルケースで命名し、説明的な名前をつけます。
 
ほとんどのシナリオで、パラメーター名と型を見ただけでパラメーターの使用法が判断できるような名前にする必要があります。
 
パラメーターの型に基づいた名前ではなく、パラメーターの意味に基づいた名前を使用するように心がけてください。
 
出典
 

フィールド名の命名規則

フィールド名には、「名詞や名詞句」をパスカルケースで命名します。
 
命名とは別の話になりますが、パブリックインスタンスフィールドとプロテクトインスタンスフィールドの使用は禁止です。理由はベースクラスで値の変化を制御できなくなるからです。
 
派生クラスで値を変更したい場合は、プロパティを通じて公開してください。
 
フィールド名へのプレフィックスの使用は禁止です。たとえば、静的フィールドと非静的フィールドを区別するために、「g_」や「s_」を付加することも禁止です。
 
私は今までフィールド名はキャメルケース派だったもので、パラメーターと区別するために「_」のプレフィックスを付けていましたが、両方ともNGですね~これからは気をつけます。
 
出典
 

イベント名の命名規則

イベント名には、メソッド名と同様に「動詞または動詞句」を使用します。
 
イベントは発生タイミングが重要ですので、現在形と過去形を使用して前後の概念を与えます。
 
たとえばウィンドウを閉じる前に発生させるクローズイベントには「Closing」という名前を付け、ウィンドウを閉じた後に発生させるクローズイベントには「Closed」という名前を付けます。
 
プレイベントやポストイベントを表すために、「Before」または「After」というプレフィックスやサフィックスを使用することは禁止です。
 
イベントハンドラー(イベントの型として使用されるデリゲート)の名前には、「EventHandler」というサフィックスを付けます。
 
イベントハンドラーシグネチャには、「sender」および「e」という名前の2つのパラメーターを使用します。
 
「sender」パラメーターは「Object」型とし、「e」パラメーターは「EventArgs」のインスタンスとするか、またはこれを継承した型を指定します。
 
イベント引数クラスの名前には、「EventArgs」というサフィックスを付けます。
 
出典
 

プロパティ名の命名規則

プロパティ名には、「名詞・名詞句または形容詞」を使用します。
 
Get(取得する)、Set(設定する)から始まるメソッド名の名詞句と同じ名前のプロパティ名の使用は禁止です。
 
理由はプログラマーがプロパティとメソッドのどちらを使用してよいか分からなくなるためです。
 
データを保持する箱がほしい場合は、プロパティを使用してください。
 
出典
 

メソッド名にローマ字を使用する場合

プロジェクトの方針でローマ字を使用する場合でも、メソッド名は「英語の動詞」で始めるべきです。
 
ローマ字の場合、「顧客データを生成する」をそのままメソッド名にすると、動詞が最後に来てしまいプログラマーは最後まで読まないと処理の内容が把握できません。
 
「CreateKokyakuData」のようなメソッド名にすると、直観的に処理の内容を把握できます。
 

メソッド名の命名規則

メソッド名には、動詞または動詞句を割り当てます。動詞句とは「基本動詞+前置詞または副詞」のことですので、「メソッド名は動詞(+名詞)で構成される」と覚えておけば、ほぼ間違いないでしょう。
 
永続性の4つの基本機能であるCRUDは、Create(作る)、Read(読む)、Update(更新する)、Delete(削除する)の頭文字です。これらの動詞を使えば、ある程度のメソッド名は網羅できます。
 
「顧客データを生成する」であれば「CreateCustomerData」になりますし、「顧客データを削除する」であれば「DeleteCustomerData」のように命名します。
 
実際は微妙なニュアンスを表現したいので、メソッド名には数多くの動詞が使われます。あまりカオスにならないよう、プロジェクトの立ち上げ初期に使用できる動詞の定義はすませておきましょう。
 
出典
g h T
 19,618 Total Views