Почему большинство полей (членов класса) в учебнике Android начинаются с "m"?

Я знаю о правилах верблюда, но я путаюсь с этим правилом м. Что это значит? Я разработчик PHP. "Мы" используем первые буквы переменных как указание типа, например " b "для логического," i " для целого числа и так далее.

является ли ' m ' Java вещь? Это означает мобильный? смешанные?

14 ответов


эта нотация происходит от AOSP (проект с открытым исходным кодом Android) рекомендации по стилю кода для участников:

Следуйте Правилам Именования Полей

  • непубличные, нестатические имена полей начать с м.
  • имена статических полей начинаются с 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 делают это, хотя с современными IDEs это не нужно, так как у вас есть подсветка, мышь над подсказками и т. д.


согласно чистой кодовой книге, это не чистый код.

вам не нужно префикс переменных-членов с m. Кроме того, люди быстро учатся игнорировать приставку или суффикс, чтобы увидеть значимую часть имени.


Я думаю, что это очень индивидуально, какие соглашения кода используются. Я предпочитаю называть свои переменные следующими префиксами:

  • м - переменных методом
  • переменные c - класса
  • п - переменные параметра

но я думаю, что каждый программист имеет свой стиль.


Если у вас есть такие проблемы, как

ваша IDE для создания сеттеров / геттеров, и вы в конечном итоге с getmName() и setmName()

Не забудьте сделать следующее (Настройки / Редактор / Стиль Кода / Java / Генерация Кода):

enter image description here


Как упоминалось ранее, он стилизован под другую переменную. Но также это очень полезно для генерации кода. Если вы нажмете "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 methods name. После этого "get "' и" set "для поля будут сгенерированы без"m". Andoroid Fle- > Настройка - >Стиль Кода -> Ява->Genenretion Код. И сделать как на картинке. Может, это поможет. Прости за мою Англию. настройка android


чтобы доказать, что вы определенно не должны рассматривать это Соглашение для именования переменных в вашем коде, я передаю скриншот от родителя Android Studio ниже.

найдите, что переменные внутри объекта специально отсортированы, чтобы поместить M-переменные ниже ваших собственных переменных. Поэтому, называя их в своем коде с префиксом" m", вы спрятать их в кучу от себя.

enter image description here


кажется, это было личное предпочтение некоторых ранних инженеров Android / Google, чтобы начать переменные-члены с "m", и поэтому они рекомендовали его.

теперь это правило навязывается разработчикам в компаниях, которые не являются участниками AOSP, просто потому, что эта страница считается правилами стиля кода Android. В этом правиле мало пользы. Google должен рассмотреть возможность его удаления. В противном случае укажите, что для приложений Android какой из стилей кода Правила необязательны.

пожалуйста, добавьте свой комментарий поддержки к этой петиции, чтобы удалить правило https://code.google.com/p/android/issues/detail?id=226814


в качестве материи читаемости больше не следует использовать (m для переменных-членов, s для статических полей), если вы используете современную IDE (Android Studio). Android Studio может различать те, без добавления m или s.


также можно сказать, что он означает "мой", так как в классе/экземпляре говорится: "эта переменная моя, и никто другой не может добраться до нее."Отличается от статического, который, хотя он может быть доступен только классу, он разделяется всеми экземплярами этого класса. Например, если вы рисуете круги, вам нужно знать, насколько велик радиус каждого круга

    private double mRadius;

но в то же время вы хотите, чтобы счетчик отслеживал все круги, внутри класса circle вы могли есть

    private static int sCircleCount;

а затем просто статические члены для увеличения и уменьшения количества кругов, которые у вас есть в настоящее время.


единственное преимущество, которое я нашел в этом стиле кода,-это когда во время автозаполнения некоторой ссылки на переменную я знаю, что могу ввести "m", чтобы увидеть только переменные-члены.


следуйте правилам именования полей

Non-public, non-static field names start with m.

Static field names start with s.

Other fields start with a lower case letter.

Public static final fields (constants) are 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;
}