为什么Android教程中的大多数字段(类成员)以“m”开头?

我知道骆驼格规则,但我对这个m规则很困惑。它代表什么?我是PHP开发人员。“我们”使用变量的首字母来表示类型,例如'b'表示布尔值,'i'表示整数,等等。

“m”是Java的东西吗?它代表移动吗?混合吗?

90704 次浏览

很多编码指南使用m表示类的“成员”。当你在编程时,你可以看到局部变量和成员变量之间的区别。

如果它是类中的成员变量,'m'表示'成员'。许多Java程序员都这样做,尽管在现代ide中不需要这样做,因为你有高亮显示,鼠标在工具提示上,等等。

我认为使用哪种代码约定是非常个性化的。我更喜欢用下面的前缀来命名变量:

  • m -方法变量
  • c -类变量
  • p -参数变量

但我想每个程序员都有自己的风格。

这个符号来自AOSP (Android开源项目)贡献者的代码风格指南:

遵循字段命名约定

  • 非公共、非静态字段名 从m开始,
  • 静态字段名以s开头。
  • 其他字段以小写字母开头。
  • 公共静态final字段(常量)为all_caps_with_下划线。

请注意,链接的样式指南是用于贡献给Android开源项目的代码。

它不是单个Android应用程序代码的风格指南。

什么是m前缀?

代表成员变量或数据成员。对非公共和非静态字段使用前缀。

何时使用?

private String mCityName;
private float mTemperature;

什么时候不使用?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

我做什么?

就我个人而言,我不使用它。它使代码更复杂,可读性更混乱。如果你仍然使用记事本编码,我没有文字,但现代ide能够高亮显示和着色成员和局部变量或其他任何东西。

结论

使用?“是”或“否”是你自己的选择。

正如前面提到的,它是为不同的变量设计的。但是它对于代码生成也非常有用。如果你按下“Alt + Insert”,你会得到大多数常见代码生成属性的窗口。如果你想为你的变量生成“get”方法,你会得到。

public class Foo{
private int bar;


public int getBar(){
return this.bar;
}


public void setBar(int bar){
this.bar = bar;
}


}

但如果你声明“m, s”,你会得到:

public class Foo{
private int mBar;


public int getBar(){
return mBar;
}


public void setBar(int bar){
mBar = bar;
}
}
它将自动生成,“m”或“s”将从你的构造函数、get、set方法名称中删除。 在此之后,字段的“get”和“set”将不带“m”而生成。Andoroid Fle->设置->代码样式-> Genenretion Java - >代码。就像在画上一样。 也许会有帮助。 对不起,我说错了。 配置安卓 < / p >

根据清洁代码书,这不是一个干净的代码。

你不需要给成员变量加上前缀。此外,人们很快就学会忽略前缀或后缀,去看名字中有意义的部分。

考虑到可读性,如果你使用的是像Android Studio这样的现代IDE,那么成员变量的m惯例和静态字段的s惯例就不应该再使用了。Android Studio可以在不添加ms的情况下区分它们。

也可以说它代表“我的”,就像在类/实例中说的那样:“这个变量是我的,没有其他人可以得到它。”与静态不同的是,虽然它可能只对类可用,但它由该类的所有实例共享。就像你在画圆,你需要知道每个圆的半径有多大

    private double mRadius;

但与此同时,你需要一个计数器来跟踪所有的圆,在circle类中

    private static int sCircleCount;

然后只有静态成员来增加或减少你目前拥有的圆的数量。

这似乎是一些早期Android/谷歌工程师的个人偏好,以“m”开始成员变量,所以他们推荐它。

现在,这条规则被强加给那些既不是AOSP贡献者的公司的开发人员,仅仅是因为该页面被认为是Android代码风格规则。这条规则几乎没有什么好处。谷歌应该考虑删除它。否则,请指定Android应用程序的代码风格规则是可选的。

请在此请愿书中添加您的支持意见,以删除规则https://code.google.com/p/android/issues/detail?id=226814

为了证明你绝对不应该在你的代码中使用这个约定来命名变量,我在下面传递一个来自父类Android工作室的截图。

找到对象内的变量被特别排序以放置m-变量比你的原生变量低。所以在代码中用"m"前缀你把它们藏起来,不让自己看到

enter image description here

我发现这种代码风格的一个好处是,在自动完成对某个变量的引用时,我知道我可以输入“m”来只看到成员变量。

如果你有这样的问题

你的IDE生成setter /getter,你最终得到getmName() 和setmName () < / p >

不要忘记执行next (设置/编辑器/代码样式/Java/代码生成):

enter image description here

更新:我们在Kotlin中不使用这样的东西(所以最好切换到它,不再使用前缀)

以下是命名约定:

  • 非公共的、非静态的字段名以m开头。
  • 静态字段名以s开头。
  • 其他字段以小写字母开头。
  • 公共静态final字段(常量)为all_caps_with_下划线。

例子:

public class MyClass {
public static final int SOME_CONSTANT = 42;
public int publicField;
private static MyClass sSingleton;
int mPackagePrivate;
private int mPrivate;
protected int mProtected;
}