Androidチュートリアルのほとんどのフィールド(クラスメンバー)が `m`で始まるのはなぜですか?


446

キャメルケースのルールについては知っていますが、このmルールと混同しています。それは何の略ですか?私はPHP開発者です。「私たち」は、ブールの「b」、整数の「i」のように、変数の最初の文字をタイプの指標として使用します。

「m」はJavaのものですか?それはモバイルの略ですか?混合?


281
その接頭辞は読みやすさを台無しにする以外に何もしません...
Dapeng

10
接頭語が悪いと呼ばれるハンガリー表記は参照として種類を示すthc.org/root/phun/unmaintain.htmlをkernel.org/doc/Documentation/CodingStyle
Muayyad Alsadi

10
彼らはそもそもJavaコードのスタイルについてあまり知識を持っていなかったため
Victor Ionescu 2013年

10
私の意見では、ローカル変数とメンバー変数を区別するのに問題がある場合、コードの規則に準拠するよりもはるかに大きな問題が発生します。私が(時々)使用する規則は次のとおりです。ロングライフ、ロングネーム。短い人生、短い名前。これまで混乱していません。
ブランドン

17
実際の愚かな接頭辞。IDEを使用してセッター/ゲッターを生成すると、最終的にgetmName()とsetmName()になります。また、生成セッター、ゲッター、コンストラクターなどのLombokなどのツールは、m接頭辞を生成します。私の選択では、mプレフィックスは値を追加しないため、命名規則から削除する必要があります。
userM1433372 2014年

回答:


551

この表記は、AOSP(Android Open Source Project)貢献者向けのコードスタイルガイドラインに基づいています。

フィールドの命名規則に従う

  • 非パブリックで非静的なフィールド名はmで始まります。
  • 静的フィールド名はsで始まります。
  • 他のフィールドは小文字で始まります。
  • public static finalフィールド(定数)はALL_CAPS_WITH_UNDERSCORESです。

リンクされたスタイルガイドは、Androidオープンソースプロジェクトにコードを提供するためのものです。

個々のAndroidアプリのコードのスタイルガイドではありません。


33
面白い... GoogleのJavaコードのスタイルは、実際に反するAOSPコードのスタイルをこのについて。
ゴータム

51
これらの時代では、特にあなたのアプリでそれをすることはナンセンスだと思います!「クラスと関数は、必要のないほど小さくする必要があります。また、メンバーをハイライトまたは色分けして区別できるようにする編集環境を使用する必要があります。さらに、プレフィックス(またはサフィックス)を無視して、名前の意味のある部分です。コードを読むほど、接頭辞が見えなくなります。最終的に、接頭辞は見づらくなり、古いコードのマーカーになります。」
-Robert

4
GoogleのJavaスタイルガイドと矛盾します -「非定数フィールド名(静的またはその他)はlowerCamelCaseで記述されます。例:computedValues...」
AlikElzin-kilaka

個々のアプリについては、「m」の代わりにアプリ名の小文字のイニシャルを使用することを提案する素晴らしいヒントを覚えています。
abcoep

4
ルールを削除するには、このペティションに
likejudo

83

多くのコーディングガイドラインでは、クラスの「メンバー」にmを使用しています。したがって、プログラミングしているときに、ローカル変数とメンバー変数の違いを確認できます。


90
最近のIDEはすべて、ローカル/メンバーを色/フォントで区別しmます。これは、接頭辞よりも読みやすくなっています。
Dzmitry Lazerka 2014

5
同意した。mのことは非常に迷惑だと思いますが、それはIntelliJが素晴らしいからです。
ZakTaccardi 2015

ルールを削除するには、このペティションに
likejudo

4
ほとんどのコードレビューツールの@DzmitryLazerkaでは、このレベルの強調表示はありません。ですから、それは大きなオープンソースプロジェクトで意味を成します。
JWqvist 2017

@DzmitryLazerkaメモ帳やgithubなどでコードを読み取るのはどうですか?
user924 '19年

57

m接頭辞とは何ですか?

mメンバー変数またはデータメンバーを表します。m非パブリックおよび非静的フィールドにはプレフィックスを使用します。

いつ使用するのですか?

private String mCityName;
private float mTemperature;

いつ使用しないのですか?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

私がやること?

個人的には使用しません。それはコードをより複雑にし、読みやすさを混乱させます。まだコーディングにメモ帳を使用している場合、言葉はありませんが、最新のIDEはメンバーとローカル変数などを強調表示して色を付けることができます。

結論

使用する?「はい」または「いいえ」はあなたの個人的な選択です。


1
あなたはまたのためにそれを使用することができpublic static intますが、使用sするのではなく、mpublic static int sFirstNumber;、参照stackoverflow.com/a/49453184/7767664
user924

31

クラスのメンバー変数の場合、「m」は「メンバー」を意味します。多くのJavaプログラマーがこれを行いますが、最新のIDEでは、強調表示やマウスオーバーツールチップなどがあるため、必要ありません。


9
コード補完を使用する場合、最新のIDEでも、クラスのすべてのメンバー変数を同じ場所に表示するために、メンバーの前にmまたはm_を付けると便利だと私は主張します。つまり、クラスで作業しているときは、m_ + ctrlスペースを押すだけで、すべてのメンバーのリストを取得できます。
Nailer 2010年

38
ネイラー、あなたはこれを使って同じことを成し遂げることができました。+ Ctrlスペース:)
Romain Guy

3
また、コードリストを印刷する場合も役立ちます。そのためのツールチップがありません(そうです。コードを印刷して、安楽椅子やベッドで読むこともときどきあります)。
B.クレイシャノン、

3
@domenicop私はプロの接頭辞ではありませんが、クラス内の属性の種類を区別することが目的だと思います。そうは言っても、これらの属性のみを含みビジネスロジック(レコードクラス)を含まないクラスを除いて、通常はどこにもパブリック非静的属性を使用しません。この場合、クラスにはビジネスロジックがないため、mは役に立ちません。したがって、(これらのフィールドを参照するとき)クラスの外で読みやすくするために削除することをお勧めします。
ジョフリー

2
私の意見では、このような接頭辞を使用せずにフィールド、パラメーター、変数を簡単に区別できない場合、それはコードに問題があることを意味します。クラスまたはメソッドが大きすぎる可能性があります。
Konrad Morawski、2015

9

クリーンコードブックによると、それはクリーンなコードではありません。

メンバー変数の前にmを付ける必要はありません。その上、人々はすぐに名前の意味のある部分を見るために接頭辞や接尾辞を無視することを学びます。


9

あなたのような問題がある場合

IDEでセッター/ゲッターを生成すると、最終的にgetmName()とsetmName()になります。

次を行うことを忘れないでください(設定/エディター/コードスタイル/ Java /コード生成):

ここに画像の説明を入力してください

更新: Kotlinでこのようなものを使用しません(そのため、これに切り替えて、プレフィックスを使用しない方が良いです)。


6

どのコード規約が使用されているかは非常に個人的なものだと思います。変数には次の接頭辞を付けたいと思います。

  • m-メソッド変数
  • c-クラス変数
  • p-パラメータ変数

しかし、私は各プログラマーが独自のスタイルを持っていると思います。


7
ほとんどのJava開発者は、クラス、メソッド、静的、およびパラメーター変数に異なる視覚スタイルを設定できるIDEを使用していることを考えると、たとえば、静的変数/メソッドに下線を付けたり、クラス変数をイタリックにしたりする方がはるかに便利です。そしてもちろん、もちろん独自のフォントと色を設定できます。また使用するプレフィックスに関係なく常に機能します。しかし、もちろん、IDEを終了すると、魔法はすべてなくなります。
ccpizza 2013年

4

コードで変数を命名するためのこの規則を明確に扱うべきではないことを証明するために、以下の親Android Studioからスクリーンショットを渡します。

オブジェクト内の変数は、m変数をネイティブ変数よりも低くするように特別にソートされていることを確認してください。したがって、コード内で「m」プレフィックスを付けて名前を付けることで、ヒープ内で自分から非表示にします

ここに画像の説明を入力してください


3

このコードスタイルで見つけた1つの利点は、変数への参照のオートコンプリート中に、「m」を入力してメンバー変数だけを表示できることがわかったときです。


2

前に述べたように、それは異なる変数に対してスタイルが設定されています。ただし、コード生成にも非常に役立ちます。「Alt + Insert」を押すと、最も一般的なコード生成プロパティのウィンドウが表示されます。変数の「取得」メソッドを生成する場合は、取得します。

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」が削除されます。この後、フィールドの「取得」と「設定」は「m」なしで生成されます。Andoroid Fle->設定->コードスタイル-> Java->コードの生成。写真のように作ります。多分それは役立つでしょう。申し訳ありません。 Androidを構成する


2

メンバー変数を「m」で始めるのは、初期のAndroid / Googleエンジニアの個人的な好みだったようで、推奨されました。

現在、このルールはAOSPの貢献者ではない企業の開発者の喉を押し下げています。そのページがAndroid Code Styleルールと見なされているからです。そのルールにはほとんどメリットがありません。Googleはそれを削除することを検討する必要があります。それ以外の場合は、Androidアプリの場合、どのコードスタイルルールがオプションであるかを指定してください。

この請願書にサポートのコメントを追加して、ルールを削除してくださいhttps://code.google.com/p/android/issues/detail?id=226814


2

Android Studioのような最新のIDEを使用している場合は、読みやすさの問題からm、メンバー変数とs静的フィールドの規則を使用しないでください。Android Studioは、mまたはを追加せずにそれらを区別できsます。


1

また、クラス/インスタンスが「この変数は私の変数であり、他の誰もそれに到達することはできない」と言っているように、それは「私のもの」を表すとも言えます。staticとは異なりますが、Classでのみ使用できる場合もありますが、そのクラスのすべてのインスタンスで共有されます。円を描く場合と同様に、各円の半径の大きさを知る必要があります

    private double mRadius;

同時に、カウンターにすべてのサークルを追跡させたい場合は、サークルクラス内で、

    private static int sCircleCount;

そして、現在持っているサークルの数を増やしたり減らしたりするための静的メンバーがあります。


1

以下は命名規則です。

  • 非パブリックで非静的なフィールド名はmで始まります。
  • 静的フィールド名はsで始まります。
  • 他のフィールドは小文字で始まります。
  • public static finalフィールド(定数)はALL_CAPS_WITH_UNDERSCORESです。

例:

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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.