web-dev-qa-db-fra.com

Pourquoi la plupart des champs (membres de classe) du Android tutoriel commencent-ils par `m`?

Je connais les règles de l'affaire des chameaux, mais cette règle me confond. Qu'est ce que cela signifie? Je suis un développeur PHP. "Nous" utilisons les premières lettres des variables comme indication de type, comme "b" pour les booléens, "i" pour les entiers, etc.

Est-ce que je suis une chose deJava? Est-ce que cela signifie mobile? mixte?

422
pambuk

Cette notation provient de AOSP (Projet Open Source Android) Directives de style de code pour les contributeurs :

Suivre les conventions de dénomination de champ

  • Les noms de champs non publics et non statiques commencent par m.
  • Les noms de champs statiques commencent par s.
  • Les autres champs commencent par une lettre minuscule.
  • Les champs finaux statiques publics (constantes) sont ALL_CAPS_WITH_UNDERSCORES.

Notez que le guide de style lié indique que le code doit être ajouté au projet Open Source Android.

Ce n'est pas un guide de style pour le code de chaque application Android.

532
xiaobing.zhao

De nombreuses lignes directrices de codage utilisent m pour les "membres" d'une classe. Ainsi, lorsque vous programmez, vous pouvez voir la différence entre les variables locales et les variables membres.

82
Kolky

Quel est m préfixe?

m représente membre variable ou membre de données. Utilisation m préfixe pour les champs non publics et non statiques.

Quand utiliser?

private String mCityName;
private float mTemperature;

Quand ne pas utiliser?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

Qu'est-ce que je fais?

Personnellement, je ne l'utilise pas. Cela rend le code plus compliqué et chaos la lisibilité. Si vous utilisez encore Notepad pour le codage, je n'ai pas de mots, mais les IDE modernes sont capables de mettre en surbrillance et de colorer les membres et les variables locales ou autre chose.

Conclusion

Utilisation? "Oui" ou "Non" est votre choix personnel.

53
Madan Sapkota

S'il s'agit de variables membres dans des classes, le "m" signifie "membre". Beaucoup de programmeurs Java le font, bien qu'avec les IDE modernes, ce n'est pas nécessaire puisque vous avez la surbrillance, la souris sur les info-bulles, etc.

31
ahans

Si vous avez des problèmes comme

votre IDE pour générer des setters/getters et vous vous retrouvez avec getmName () et setmName ()

N'oubliez pas de faire ensuite ( Paramètres/Éditeur/Style de code/Java/Génération de code ):

enter image description here

Mise à jour: nous n'utilisons pas quelque chose comme ceci dans Kotlin (il est donc préférable de passer à cette option et de ne plus utiliser de préfixes)

9
user924

Selon le livre de code propre, ce n'est pas un code propre.

Vous n'avez pas besoin de préfixer les variables membres avec m. En outre, les gens apprennent rapidement à ignorer le préfixe ou le suffixe pour voir la partie significative du nom.

8
Hamedz

Je pense que les conventions de code utilisées sont très individuelles. Je préfère nommer mes variables avec les préfixes suivants:

  • m - Variables de méthode
  • c - Variables de classe
  • p - Variables de paramètre

Mais je suppose que chaque programmeur a son propre style.

7
Steffen Jørgensen

Pour prouver que vous ne devez absolument pas traiter cette convention pour nommer les variables dans votre code, je passe une capture d'écran d'un parent Android Studio ci-dessous.

Trouvez que les variables à l'intérieur d'un objet sont spécialement triées pour placer des variables m inférieures à vos variables natives . Donc, en les nommant dans votre code avec le préfixe "m", vous les cachez dans un tas de vous-même .

enter image description here

4
Zon

Comme mentionné précédemment, il est stylé pour une variable différente. Mais c'est aussi très utile pour la génération de code. Si vous appuyez sur "Alt + Inser", vous obtiendrez des fenêtres pour les propriétés de génération de code les plus courantes. Si vous voulez générer la méthode "get" pour votre variable, vous obtiendrez.

public class Foo{
   private int bar;

   public int getBar(){
       return this.bar;
   }

   public void setBar(int bar){
       this.bar = bar; 
   }

}

Mais si vous déclarez "m, s" vous obtiendrez:

public class Foo{
private int mBar;

public int getBar(){
   return mBar;
}

public void setBar(int bar){
   mBar = bar;
}
}

Il sera généré automatiquement et "m" ou "s" sera supprimé de votre constructeur, get, set méthodes name. Après cela, "get" 'et "set" pour le champ seront générés sans "m". Andoroid Fle-> Setting-> Code Style-> Java-> Code Genenretion. Et faire comme sur une photo. Peut-être que ça va aider. Désolé pour mon eng. Configurer Android

3
IHAFURR

Il semble que certains ingénieurs de Google/Android de l’époque aient personnellement préféré commencer les variables de membre avec "m" et l’ont donc recommandé.

Maintenant, cette règle est imposée aux développeurs de sociétés qui ne sont ni des contributeurs AOSP, simplement parce que cette page est considérée comme Android règles de style de code. Cette règle présente peu d'avantages, voire aucun. Google devrait envisager de l'enlever. Sinon, veuillez spécifier pour Android Apps quelles règles de style de code sont facultatives.

Ajoutez votre commentaire de soutien à cette pétition pour supprimer la règle https://code.google.com/p/Android/issues/detail?id=226814

2
likejudo

Le seul avantage que j'ai trouvé de ce style de code est que, lors de la saisie automatique d'une référence à une variable, je sais que je peux taper "m" pour afficher uniquement les variables membres.

2
Janac Meena

On peut également affirmer que cela signifie "le mien", comme dans la classe/l'instance dit "Cette variable est la mienne et personne d'autre ne peut y accéder." Différent de static qui, s'il est disponible uniquement pour la classe, est partagé par toutes les instances de cette classe. Comme si vous dessiniez des cercles, vous devez connaître la taille du rayon de chaque cercle.

    private double mRadius;

mais en même temps, vous voulez un compteur pour garder une trace de tous les cercles, à l'intérieur de la classe de cercle que vous pourriez avoir

    private static int sCircleCount;

et puis juste avoir des membres statiques pour augmenter et diminuer le nombre de cercles que vous avez actuellement.

1
jimistephen

Voici les conventions de dénomination,

  • Les noms de champs non publics et non statiques commencent par m.
  • Les noms de champs statiques commencent par s.
  • Les autres champs commencent par une lettre minuscule.
  • Les champs finaux statiques publics (constantes) sont ALL_CAPS_WITH_UNDERSCORES.

Exemple:

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

Par souci de lisibilité, la convention m pour les variables membres et s pour les champs statiques ne doit plus être utilisée si vous utilisez un IDE moderne, comme Android. _ Studio. Android Studio peut différencier ceux-ci sans ajouter m ou s.

1
aselims