AndroidJavaでは昔からAOSPのcoding style guidelineに則ったスタイルがとられることが多いようです。そのなかで、private fieldに "m" (member) や "s" (static member) などのプレフィクスをつけよ、というものがあります。
AOSP Java Code Style for Contributors | Android Open Source Project
これはいわゆるハンガリアン記法の変種で、こういうやつですね。
class Recipe {private String mTitle;private List<String> mSteps;// ...}
これについての態度はプロジェクトごとに様々ですが、たとえばクックパッド社のJavaのスタイルガイドでは明確に否定しています。
styleguide/java.ja.md at master · cookpad/styleguide · GitHub (Android Studio用のスタイル設定ファイル)
[MUST]フィールドにプレフィックスは付けないものとする。
私もこのスタイルガイドを定める議論に参加したのですが、その時は「m/sなどのプレフィクスはそもそも意味がない」「OracleJavaのガイドラインはプレフィクスを否定している」という理由でプレフィクスなしに決まったと記憶しています。
ところで数日前に、Jake Whartonもこのハンガリアン記法を否定するエントリを書いています。"mNo" というタイトルからして、mプレフィクスがいかに滑稽かということを主張したいのかわかりますね。
Just Say mNo to Hungarian Notation - Jake Wharton
エントリは問答形式になっていて、要点は次のとおりです。
Jake: よく参照される 「AndroidJava公式スタイルガイド」とやらはAOSPにコントリビュートするときのスタイルガイドだ。AndroidJavaのコード一般のためのものじゃない。
Jake: サンプルコードはAOSPのなかのコードだからAOSPのスタイルに従っているというだけだ。
Jake:もともとのハンガリアン記法は型情報をつけるものだ(*1 フィールドの可視性はコードレビューには役に立たない。さらに悪い事に、名前に付けられた情報が正しいとは限らない。staticlong lUserId など)。mContext field のようなものは非常に発見しにくいバグとなる。
Jake:Android StudioもIntelliJ IDEAも見た目でインスタンスフィールドと静的フィールド区別できるようにしている。
Jake: AOSPはたしかにGoogleのプロジェクトの一つだが、GoogleのJavaスタイルガイドはハンガリアン記法を否定している。AOSPはGoogleが買収したプロジェクトだということを思い出そう。
私もJakeに賛成で、mプレフィクスを使うべきではないと思っています。
追記1:
最近気づいたのは、m prefix付きだとリフレクションやaptなどのメタプログラミングとどうにも相性が悪いということです。たとえばAndroid Ormaはコンパイル時にフィールド名をもとにクエリビルダを生成するのですが、m付きだとそのクエリビルダがたとえばmUserIdEq() などとなってしまいおかしなことになります。クエリビルダのための名前をアノテーションに渡すという方法も考えられますが、そもそもm prefixなしでやればいいだけなので、特に対応はしないつもりでいます。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。