Why do most fields (class members) in Android tutorial start with `m`?
我知道骆驼案例规则,但我对这个规则感到困惑。 它代表什么? 我是一名PHP开发人员。"我们"使用变量的第一个字母作为类型的指示,如"b"表示布尔值,"i"表示整数,依此类推。
是'Java'吗? 它代表移动吗?混合使用吗?
此表示法来自AOSP(Android开源项目)代码风格指南:
Follow Field Naming Conventions
- Non-public, non-static field names
start with m.- Static field names start with s.
- Other fields start with a lower case letter.
- Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.
请注意,链接样式指南用于将代码提供给Android开源项目。
它不是单个Android应用程序代码的样式指南。
许多编码指南行使用m作为类的"成员"。因此,当您编程时,您可以看到本地变量和成员变量之间的差异。
什么是m前缀?
m代表成员变量或数据成员。将m前缀用于非公共和非静态字段。
什么时候用?
1 2 | private String mCityName; private float mTemperature; |
什么时候不用?
1 2 | public static int mFirstNumber; public static final String mDATABASE_NAME; |
我所做的?
就个人而言,我不使用它。它使代码更复杂并且使可读性变得混乱。如果您仍然使用记事本进行编码我没有任何文字,但现代IDE能够突出显示和着色成员和局部变量或其他任何东西。
结论
使用?"是"或"否"是您的个人选择。
如果它是类中的成员变量,则"m"表示"成员"。许多Java程序员都这样做,虽然使用现代IDE,因为你有突出显示,鼠标悬停在工具提示等等,所以不需要它。
如果你有类似的问题
your IDE to generate setters/getters and you end up with getmName()
and setmName()
不要忘记下一步(设置/编辑器/代码样式/ Java /代码生成):
更新:我们在Kotlin中不使用这样的东西(所以最好切换到它并且不再使用前缀)
根据清洁代码书,这不是一个干净的代码。
You don't need to prefix member variables with m. Besides, people quickly learn to ignore the prefix or suffix to see the meaningful part of the name.
我认为使用哪种代码约定非常个性化。我更喜欢用以下前缀命名我的变量:
- m - 方法变量
- c - 类变量
- p - 参数变量
但我想每个程序员都有自己的风格。
为了证明你定义不应该在代码中为命名变量处理这个约定,我从下面的父Android Studio传递截图。
在对象内部找到一个特殊排序的变量,将m变量放在低于原生变量的位置。 因此,通过在代码中使用"m"前缀命名它们,可以将它们隐藏在自己的堆中。
如前所述,它的设计风格为不同的变量。但它对代码生成也非常有用。如果按"Alt + Insert",您将获得大多数常见代码生成属性的窗口。如果你想为变量生成"get"方法,你会得到。
1 2 3 4 5 6 7 8 9 10 11 12 | public class Foo{ private int bar; public int getBar(){ return this.bar; } public void setBar(int bar){ this.bar = bar; } } |
但如果你宣布"m,s",你会得到:
1 2 3 4 5 6 7 8 9 10 11 | public class Foo{ private int mBar; public int getBar(){ return mBar; } public void setBar(int bar){ mBar = bar; } } |
它将自动生成并从构造函数中删除"m"或"s",获取,设置方法名称。
在此"get"'和"set"之后,将生成没有"m"的字段。 Andoroid Fle->设置 - >代码风格 - >
Java-> Code Genenretion。并制作一张照片。
也许它会有所帮助。
对不起,我的工程师。
配置android
我发现这种代码风格的一个好处是,在对变量的一些引用的自动完成期间,我知道我可以键入"m"来查看成员变量。
似乎一些早期的Android / Google工程师个人偏好用"m"启动成员变量,所以他们推荐它。
现在,这条规则正被强制要求那些既不是AOSP贡献者的公司的开发人员的喉咙,只是因为该页面被认为是Android Code Style规则。该规则几乎没有任何好处。谷歌应考虑删除它。否则,请为Android应用程序指定哪些代码样式规则是可选的。
请在此请愿书中添加您对支持的评论,以删除规则https://code.google.com/p/android/issues/detail?id=226814
以下是命名约定,
- Non-public, non-static field names start with m.
- Static field names start with s.
- Other fields start with a lower case letter.
- Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.
例:
1 2 3 4 5 6 7 8 | 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; } |
也可以说它代表"我的",就像Class / Instance所说的那样"这个变量是我的,没有其他人可以接受它。"与静态不同,虽然它可能仅对类可用,但它由该类的所有实例共享。就像你画圆圈一样,你需要知道每个圆的半径有多大
1 | private double mRadius; |
但与此同时,你想要一个计数器来跟踪你可以拥有的圆圈类内的所有圆圈
1 | private static int sCircleCount; |
然后只需要静态成员来增加和减少您当前拥有的圈数。
作为可读性问题,如果您使用的是像Android Studio这样的现代IDE,则不应再使用