為什麼Android教程中的大多數字段(類成員)都以`m`開頭?


我知道駱駝案例規則,但是我對這條規則感到困惑。 它代表什麼? 我是一名PHP開發人員。 “我們”使用變量的第一個字母作為類型的指示,比如“b”表示布爾型,“i”表示整型,等等。

是“Java”的東西嗎? 它代表移動? 混合使用嗎?



Answers


這個符號來自AOSP(Android開源項目) 編碼風格指南

遵循字段命名約定

  • 非公開的非靜態字段名稱以m開頭。
  • 靜態字段名稱以s開頭。
  • 其他字段以小寫字母開頭。
  • 公共靜態最終字段(常量)是ALL_CAPS_WITH_UNDERSCORES。

請注意,鏈接的樣式指南是為Android開放源代碼項目提供的代碼。

這不是個別Android應用程序代碼的風格指南。




許多編碼指南使用m作為班級的“成員”。 所以當你編程時,你可以看到本地和成員變量之間的區別。




什麼是m前綴?

m代表成員變量或數據成員。 對非公開和非靜態字段使用m前綴。

何時使用?

private String mCityName;
private float mTemperature;

什麼時候不用?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

我做的事?

就個人而言,我不使用它。 它使得代碼更加複雜,混亂的可讀性。 如果你仍然使用記事本進行編碼,我沒有任何文字,但現代的IDE能夠突出顯示和著色成員和本地變量或其他任何東西。

結論

使用? “是”或“否”是您的個人選擇。




如果它是類中的成員變量,則'm'表示'成員'。 許多Java程序員都這樣做,儘管使用現代化的IDE,因為您已經突出顯示,鼠標懸停在工具提示等等,所以不需要它。




根據清潔代碼書,這不是一個乾淨的代碼。

你不需要用m作為成員變量的前綴。 此外,人們很快學會忽略前綴或後綴,以查看名字的有意義的部分。




我認為使用代碼約定是非常個人化的。 我更喜歡用以下前綴命名我的變量:

  • m - 方法變量
  • c - 類變量
  • p - 參數變量

但我想每個程序員都有自己的風格。




正如前面提到的,它是為不同的變量而設計的。 而且對於代碼生成也非常有用。 如果你按“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方法名。 在這個“get”和“set”字段之後將會生成沒有“m”的字段。 Andoroid Fle-> Setting-> Code Style-> Java-> Code Genenretion。 並作為一個圖片。 也許這會有所幫助。 對不起,我的工程師。 配置android




對於一些早期的Android / Google工程師來說,用'm'開始成員變量似乎是個人偏好,所以他們推薦它。

現在,這個規則正在被迫停在那些既不是AOSP貢獻者的公司的開發人員的喉嚨,只是因為該頁面被認為是Android Code Style規則。 這條規則幾乎沒有任何好處。 Google應該考慮刪除它。 否則,請為Android應用程序指定哪些代碼樣式規則是可選的。

請在此請求中添加您的支持評論,以刪除規則https://code.google.com/p/android/issues/detail?id=226814




作為一種可讀性,如果您使用的是現代IDE(Android Studio),則不應再使用(m表示成員變量,s表示靜態字段)。 Android Studio可以在不添加m或s的情況下進行區分。




也可以說,它代表“我的”,正如在類/實例中所說的那樣,“這個變量是我的,而其他任何人都無法得到它”。 與靜態不同的是,儘管只有Class可用,但是該類的所有實例都共享它。 就像如果你正在繪製圓圈一樣,你需要知道每個圓的半徑有多大

    private double mRadius;

但是同時你想要一個櫃檯跟踪所有的圈子,在圈子裡面你可以有

    private static int sCircleCount;

然後只有靜態成員來增加和減少你當前擁有的圈子的數量。




為了證明你的定義不應該在代碼中使用這個約定來命名變量,我在下面傳遞一個父級Android Studio的屏幕截圖。

在一個對象內部找到一個特殊排序的變量 ,把m變量放在本地變量的下方 。 所以通過在你的代碼中用“m”前綴命名它們,你可以將它們隱藏在自己的堆中