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

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

Является ли "m" Java-вещью? Он поддерживает мобильный? смешанные?

Ответ 1

Это обозначение происходит от AOSP (Android Open Source Project) Правила стиля кода для участников:

Следуйте соглашениям об именах полей

  • Непубличные, нестатические имена полей начните с m.
  • Имена статических полей начинаются с s.
  • Другие поля начинаются с строчной буквы.
  • Открытые статические конечные поля (константы) - ALL_CAPS_WITH_UNDERSCORES.

Обратите внимание, что связанный стиль руководства предназначен для кода, который будет внесен в проект Open Source с Android.

Это не руководство по стилю для кода отдельных приложений для Android.

Ответ 2

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

Ответ 3

Что такое m префикс?

m обозначает членную переменную или элемент данных. Используйте префикс m для непубличных и нестатических полей.

Когда использовать?

private String mCityName;
private float mTemperature;

Когда не использовать?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

Что я делаю?

Лично я его не использую. Это делает код более сложным и хаосом читаемость. Если вы все еще используете Notepad для кодирования, у меня нет слов, но современные IDE способны выделять и раскрашивать членские и локальные переменные или что-то еще.

Заключение

использовать? "Да" или "Нет" - это ваш личный выбор.

Ответ 4

Если это переменная-член в классах, "m" означает "член". Многие программисты Java это делают, хотя с современными IDE это не нужно, так как вы выделяете, курсор мыши над всплывающими подсказками и т.д.

Ответ 5

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

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

Ответ 6

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

ваша IDE для генерации сеттеров/геттеров, и вы получите getmName() и setmName()

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

enter image description here

Обновление: мы не используем что-то подобное в Kotlin (так что лучше переключиться на него и больше не использовать префиксы)

Ответ 7

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

  • m - Переменные метода
  • c - Переменные класса
  • p - Параметрические переменные

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

Ответ 8

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

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

введите описание изображения здесь

Ответ 9

Как уже упоминалось ранее, это стиль для разных переменных. Но и это очень полезно для генерации кода. Если вы нажмете "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- > Setting- > Code Style- > Java- > Code Genenretion. И сделайте как на картинке. Может быть, это поможет. Извините за мой eng. Настроить андроид

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

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

Ответ 13

Можно также заявить, что оно означает "мое", так как в классе/экземпляре говорится: "Эта переменная принадлежит мне, и никто другой не может ее получить". В отличие от static, который, хотя он может быть доступен только для класса, является общим для всех экземпляров этого класса. Как если бы вы рисовали круги, вам нужно было знать, насколько большой радиус каждого круга

    private double mRadius;

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

    private static int sCircleCount;

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

Ответ 14

Ниже приведены соглашения об именах,

  • Непубличные имена нестатических полей начинаются с 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;
}