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

我知道骆驼案例规则,但是我对这条规则感到困惑。 它代表什么? 我是一名PHP开发人员。 “我们”使用variables的第一个字母作为types的指示,比如“b”表示布尔型,“i”表示整数等等。

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

这个符号来自AOSP(Android开源项目) 编码风格指南 :

遵循字段命名约定

  • 非公开的非静态字段名称以m开头。
  • 静态字段名称以s开头。
  • 其他字段以小写字母开头。
  • 公共静态最终字段(常量)是ALL_CAPS_WITH_UNDERSCORES。

请注意,链接的样式指南是为Android开放源代码项目提供的代码。

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

许多编码指南使用m作为class级的“成员”。 所以当你编程时,你可以看到本地和成员variables之间的区别。

什么是m前缀?

m代表成员variables或数据成员。 对非公开和非静态字段使用m前缀。

何时使用?

 private String mCityName; private float mTemperature; 

什么时候不用?

 public static int mFirstNumber; public static final String mDATABASE_NAME; 

我做的事?

就个人而言,我不使用它。 它使得代码更加复杂,混乱的可读性。 如果你仍然使用记事本进行编码,我没有任何文字,但现代的IDE能够突出显示和着色成员和本地variables或其他任何东西。

结论

使用? “是”或“否”是您的个人select。

如果它是类中的成员variables,则'm'表示'成员'。 许多Java程序员都这样做,尽pipe使用现代化的IDE,因为您已经突出显示,鼠标hover在工具提示等等,所以不需要它。

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

你不需要用m作为成员variables的前缀。 此外,人们很快学会忽略前缀或后缀,以查看名字的有意义的部分。

我认为使用代码约定是非常个人化的。 我更喜欢用以下前缀命名我的variables:

  • m – 方法variables
  • c – 类variables
  • p – 参数variables

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

正如前面提到的,它是为不同的variables而devise的。 而且对于代码生成也非常有用。 如果你按“Alt + Insert”,你会得到最常见的代码生成属性的窗口。 如果你想为你的variables生成“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-> Setting-> Code Style-> Java-> Code Genenretion。 并作为一个图片。 也许这会有所帮助。 对不起,我的工程师。 configurationandroid

一些早期的Android / Google工程师似乎已经个人偏好用'm'来启动成员variables,所以他们推荐它。

现在,这个规则正在被迫停在那些既不是AOSP贡献者的公司的开发人员的喉咙,只是因为该页面被认为是Android Code Style规则。 这条规则几乎没有任何好处。 Google应该考虑删除它。 否则,请为Android应用程序指定哪些代码样式规则是可选的。

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

作为一种可读性,如果您使用的是现代IDE(Android Studio),则不应再使用(m表示成员variables,s表示静态字段)。 Android Studio可以在不添加m或s的情况下进行区分。

也可以说,它代表“我的”,正如在类/实例中所说的那样,“这个variables是我的,而其他任何人都无法得到它”。 与静态不同的是,尽pipe只有Class可用,但是该类的所有实例都共享它。 就像如果你画圆圈一样,你需要知道每个圆的半径有多大

  private double mRadius; 

但是同时你想要一个柜台跟踪所有的圈子,在圈子里面你可以有

  private static int sCircleCount; 

然后只有静态成员来增加和减less你当前拥有的圈子的数量。

为了certificate你的定义不应该在代码中使用这个约定来命名variables,我在下面传递一个父级Android Studio的屏幕截图。

在一个对象内部find一个特殊sorting的variables ,把mvariables放在你的本地variables之下 。 所以通过在你的代码中用“m”前缀命名它们,你可以将它们隐藏在自己的堆中

在这里输入图像描述