web-dev-qa-db-ja.com

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

ラクダケースルールについては知っていますが、このmルールと混同しています。それは何の略ですか?私はPHP開発者です。 「我々」は、変数の最初の文字をタイプの指示として使用します。たとえば、ブール値の「b」、整数値の「i」などです。

「m」はJavaのことですか?モバイルの略ですか?混合?

417
pambuk

この表記はAOSP(Android Open Source Project)から来ています Contributorsのコードスタイルガイドライン

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

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

リンクされたスタイルガイドは、コードがAndroidオープンソースプロジェクトに提供されることに注意してください。

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

528
xiaobing.zhao

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

81
Kolky

とは m プレフィックス?

m メンバー変数またはデータメンバーを表します。つかいます m 非公開フィールドおよび非静的フィールドのプレフィックス。

使用する場合

private String mCityName;
private float mTemperature;

使用しない場合

public static int mFirstNumber;
public static final String mDATABASE_NAME;

私は何をしますか?

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

結論

つかいます? 「はい」または「いいえ」は個人的な選択です。

53
Madan Sapkota

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

31
ahans

Clean Codeの本によると、それはきれいなコードではありません。

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

8
Hamedz

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

IDEでセッター/ゲッターを生成すると、getmName()およびsetmName()になります

次に行うことを忘れないでください(Settings/Editor/Code Style/Java/Code Generation):

enter image description here

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

8
user924

どのコード規約が使用されるかは非常に個人的なものだと思います。次のプレフィックスを使用して変数に名前を付けることを好みます。

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

しかし、各プログラマーには独自のスタイルがあると思います。

7

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

オブジェクト内の変数を特別にソートして、ネイティブ変数よりもm変数を低くします。そのため、コード内で「m」という接頭辞を付けて名前を付けることで、自分からヒープ内に隠すことができます

enter image description here

4
Zon

前述のように、異なる変数に合わせてスタイルが設定されています。しかし、コード生成にも非常に便利です。 「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」は「m」なしで生成されます。 Andoroid Fle-> Setting-> Code Style-> Java-> Code Genenretion。そして絵のように作ります。たぶんそれが役立つでしょう。私の英語でごめんなさい。 Androidの設定

3
IHAFURR

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

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

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

2
likejudo

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

2
Janac Meena

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

    private double mRadius;

しかし、同時に、あなたが持つことができるサークルクラス内で、すべてのサークルを追跡するカウンターが必要です

    private static int sCircleCount;

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

1
jimistephen

以下は命名規則です。

  • 非パブリック、非静的フィールド名はmで始まります。
  • 静的フィールド名はsで始まります。
  • 他のフィールドは小文字で始まります。
  • パブリック静的最終フィールド(定数)は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;
}
1
LopezDevelop

最新のIDE(Android Studio)を使用している場合は、読みやすくするために、メンバー変数にm、静的フィールドにsを使用しないでください。 Android St​​udioは、mまたはsを追加せずにそれらを区別できます。

1
aselims