kra*_*mir 132 hungarian-notation
我经常在教程,示例和其他主要与游戏开发相关的代码中看到m_
用于变量(m_World
,m_Sprites
...)的前缀.
为什么人们m_
为变量添加前缀?
Mic*_*use 96
这是用于定义作为成员变量的变量的典型编程实践.因此,当您以后使用它们时,您不需要查看它们的定义位置以了解它们的范围.如果您已经知道范围并且使用诸如intelliSense之类的东西,那么这也很棒,您可以从这里开始,m_
并显示所有成员变量的列表.匈牙利表示法的一部分,请参阅此处示例中有关范围的部分.
Inf*_*ero 77
在清洁代码:敏捷软件工艺手册中,有一个关于此前缀用法的明确建议:
您也不需要为成员变量添加前缀
m_
.您的类和函数应该足够小,以至于您不需要它们.
还有一个例子(C#代码):
不好的做法:
public class Part
{
private String m_dsc; // The textual description
void SetName(string name)
{
m_dsc = name;
}
}
Run Code Online (Sandbox Code Playgroud)
好的做法:
public class Part
{
private String description;
void SetDescription(string description)
{
this.description = description;
}
}
Run Code Online (Sandbox Code Playgroud)
我们用语言结构计数指成员变量中明确歧义(的情况下,即,description
成员和description
参数)this
.
doc*_*doc 14
这是C++中的常见做法.这是因为在C++中,成员函数和成员变量的名称不能相同,而getter函数通常以"get"前缀命名.
class Person
{
public:
std::string name() const;
private:
std::string name; // This would lead to a compilation error.
std::string m_name; // OK.
};
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)main.cpp:9:19: error: duplicate member 'name' std::string name; ^ main.cpp:6:19: note: previous declaration is here std::string name() const; ^ 1 error generated.
"m_"表示"成员".前缀"_"也很常见.
您不应该在使用不同约定/语法解决此问题的编程语言中使用它.
Kei*_*ith 11
该m_
前缀通常用于成员变量-我认为它的主要优点是,它有助于一个公共财产和私有成员变量后盾它之间建立一个明显的区别:
int m_something
public int Something => this.m_something;
Run Code Online (Sandbox Code Playgroud)
它可以帮助为支持变量提供一致的命名约定,m_
前缀是这样做的一种方式 - 一种在不区分大小写的语言中工作的方法.
这有多大取决于您使用的语言和工具.具有强大的重构工具和智能感知的现代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
Run Code Online (Sandbox Code Playgroud)
所以...
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*
}
Run Code Online (Sandbox Code Playgroud)
物有所值。
如其他答案中所述,m_
前缀用于表示变量是类成员.这与匈牙利表示法不同,因为它不表示变量的类型,而是表示其上下文.
我m_
在C++中使用但在其他语言中没有使用'this'或'self'是强制性的.我不喜欢看到'this->'与C++一起使用,因为它使代码混乱.
另一个答案m_dsc
是"不良做法"和"描述"; 是"良好的做法",但这是一个红色的鲱鱼,因为那里的问题是缩写.
另一个答案是输入this
弹出智能感知器,但任何好的IDE都会有一个热键来为当前的类成员弹出IntelliSense.