主にゲーム開発に関連するチュートリアル、サンプル、その他のコードで、変数( 、、...) にm_
プレフィックスが使用されているのをよく見かけます。m_World
m_Sprites
なぜ人々はm_
変数に接頭辞を追加するのですか?
主にゲーム開発に関連するチュートリアル、サンプル、その他のコードで、変数( 、、...) にm_
プレフィックスが使用されているのをよく見かけます。m_World
m_Sprites
なぜ人々はm_
変数に接頭辞を追加するのですか?
これは、メンバー変数である変数を定義するための典型的なプログラミング方法です。したがって、後でそれらを使用するときに、スコープを知るために定義されている場所を確認する必要はありません。これは、スコープが既にわかっていて、 intelliSenseなどを使用している場合にも最適です。開始するm_
と、すべてのメンバー変数のリストが表示されます。ハンガリー表記の一部です。ここの例の範囲に関する部分を参照してください。
プレフィックスはメンバー変数によく使用されます。m_
主な利点は、パブリック プロパティとそれをサポートするプライベート メンバー変数を明確に区別できることだと思います。
int m_something
public int Something => this.m_something;
バッキング変数に一貫した命名規則を使用すると役立ちます。m_
接頭辞はそのための 1 つの方法であり、大文字と小文字を区別しない言語で機能します。
これがどれほど役立つかは、使用している言語とツールによって異なります。強力なリファクタリング ツールとインテリセンスを備えた最新の IDE では、このような規則の必要性が少なくなり、これが唯一の方法ではないことは確かですが、いずれにせよ実践に注意する価値があります。
ロッキード・マーチンは、特に他の人のコードを読むときに、素晴らしい 3 プレフィックスの命名スキームを使用しています。
Scope Reference Type(*Case-by-Case) Type
member m pointer p integer n
argument a reference r short n
local l float f
double f
boolean b
そう...
int A::methodCall(float af_Argument1, int* apn_Arg2)
{
lpn_Temp = apn_Arg2;
mpf_Oops = lpn_Temp; // Here I can see I made a mistake, I should not assign an int* to a float*
}
それが何の価値があるかを考えてください。
まだ見たことのない引数の 1 つは、 「d マクロ」m_
と名前が衝突するのを防ぐために などのプレフィックスを使用できるというものです。#define
curses/ncurses から#define [a-z][A-Za-z0-9_]*[^(]
の正規表現検索。/usr/include/term.h