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


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

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




Answers


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

遵循字段命名约定

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

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

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




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




什么是m前缀?

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

何时使用?

private String mCityName;
private float mTemperature;

什么时候不用?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

我做的事?

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

结论

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




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




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

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




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

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

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




正如前面提到的,它是为不同的变量而设计的。 而且对于代码生成也非常有用。 如果你按“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-> Setting-> Code Style-> Java-> Code Genenretion。 并作为一个图片。 也许这会有所帮助。 对不起,我的工程师。 配置android




对于一些早期的Android / Google工程师来说,用'm'开始成员变量似乎是个人偏好,所以他们推荐它。

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

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




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




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

    private double mRadius;

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

    private static int sCircleCount;

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




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

在一个对象内部找到一个特殊排序的变量 ,把m变量放在本地变量的下方 。 所以通过在你的代码中用“m”前缀命名它们,你可以将它们隐藏在自己的堆中