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

pam*_*buk 425 android coding-style

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

是'Java'吗?它代表移动吗?混合使用吗?

小智 534

此表示法来自AOSP(Android开源项目)代码风格指南:

遵循现场命名约定

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

请注意,链接样式指南用于将代码提供给Android开源项目.

它不是单个Android应用程序代码的样式指南.

  • 我认为在这些时候这是无稽之谈,特别是在你的应用程序中这样做!"你的类和函数应该足够小,以至于你不需要它们.你应该使用一个编辑环境来突出显示或着色成员,使它们区别开来.此外,人们很快学会忽略前缀(或后缀)来看名称的有意义部分.我们阅读代码的次数越多,我们看到的前缀就越少.最终,前缀变得看不清楚,并且是旧代码的标记." - 清洁代码中的罗伯特马丁 (42认同)
  • 有趣.. [_Google Java Code Style _](https://google.github.io/styleguide/javaguide.html#s5.1-identifier-names)实际上与_AOSP Code Style_相矛盾. (27认同)
  • 矛盾[Google的Java风格指南](https://google.github.io/styleguide/javaguide.html#s5.2.5-non-constant-field-names) - "写入非常量字段名称(静态或其他)在[lowerCamelCase](https://google.github.io/styleguide/javaguide.html#s5.3-camel-case)...例如,`computedValues` ..." (4认同)
  • 请将您的评论添加到此请愿书中,以删除规则https://code.google.com/p/android/issues/detail?id=226814 (4认同)

Kol*_*lky 82

许多编码指南行使用m作为类的"成员".因此,当您编程时,您可以看到本地变量和成员变量之间的差异.

  • 所有现代IDE都通过颜色/字体区分本地和成员,这是恕我直言的方式比`m`前缀更可读. (85认同)
  • 同意.我发现这件事非常烦人,但这只是因为IntelliJ太棒了. (5认同)
  • @DzmitryLazerka在大多数代码审查工具中你都没有这种突出显示水平.所以它确实在一个大型开源项目中发挥作用. (4认同)
  • @DzmitryLazerka 在记事本或 github 等中阅读代码怎么样? (2认同)

Mad*_*ota 54

什么是m前缀?

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

什么时候用?

private String mCityName;
private float mTemperature;
Run Code Online (Sandbox Code Playgroud)

什么时候不用?

public static int mFirstNumber;
public static final String mDATABASE_NAME;
Run Code Online (Sandbox Code Playgroud)

我所做的?

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

结论

使用?"是"或"否"是您的个人选择.


aha*_*ans 31

如果它是类中的成员变量,则"m"表示"成员".许多Java程序员都这样做,虽然使用现代IDE,因为你有突出显示,鼠标悬停在工具提示等等,所以不需要它.

  • 钉枪,你可以用这个来实现同样的目的.+ ctrl空间:) (38认同)
  • 我认为,即使使用现代IDE,也可以使用m或m_为成员添加前缀,以便在使用代码完成时为同一位置的类调出所有成员变量.这意味着当你在一个班级工作时,你可以点击m_ + ctrl空间来获得所有成员的列表. (9认同)
  • 此外,如果你打印出代码清单,这是有帮助的 - 你没有工具提示来帮助你(是的,我喜欢打印代码并在安乐椅上阅读,有时甚至在床上阅读). (3认同)
  • @domenicop我不是pro-m-prefix,但我想这个想法是要区分一个类中的属性类型.话虽这么说,我通常不会在任何地方使用公共非静态属性,除了在仅包含那些属性且没有业务逻辑(记录类)的类中.在这种情况下,m是无用的,因为类中没有业务逻辑.因此,最好将其删除以便在课堂外可读(当您引用这些字段时). (3认同)
  • 在我看来,如果你不能在不使用这些前缀的情况下轻松区分字段,参数和变量,则意味着代码存在问题.很可能这个班级或方法太大了. (2认同)

use*_*924 9

如果你有类似的问题

您的IDE生成setter/getters,最终得到getmName()和setmName()

不要忘记下一步(设置/编辑器/代码样式/ Java /代码生成):

在此输入图像描述

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


Ham*_*edz 8

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

您不需要使用m为成员变量添加前缀.此外,人们很快学会忽略前缀或后缀以查看名称的有意义部分.


Ste*_*sen 7

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

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

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

  • 考虑到大多数Java开发人员都使用IDE,它允许为类,方法,静态和参数变量设置不同的视觉样式,我发现例如下划线的静态变量/方法,斜体的类变量等等更有用.当然你可以设置自己的字体和颜色.并且*无论您使用什么前缀,它都将始终有效*.但是,当然,当你离开IDE时,魔法就消失了. (7认同)