100 votes

Convention de dénomination des identifiants Android : minuscules avec soulignement vs. minuscules avec camel.

Je suis actuellement en train de programmer une application pour Android. J'ai découvert que vous ne pouvez pas placer des objets ressources, par exemple une image dans le dossier drawable et la nommer comme "myTestImage.jpg". Vous obtiendrez une erreur de compilation car la syntaxe en majuscules n'est pas autorisée. Vous devrez donc la renommer en "mon_test_image.jpg".

Mais qu'en est-il des identifiants que vous définissez dans le fichier XML. Disons que vous avez la définition suivante

<TextView android:id="@+id/myTextViewFirstname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Firstname" />

Il s'agit d'une définition valide, qui se compile et fonctionne parfaitement sur mon émulateur Android, même si, comme vous le voyez, je spécifie l'identifiant dans la syntaxe "camel case".

Or, les échantillons Android utilisent toujours les minuscules et les traits de soulignement. S'agit-il simplement d'une convention d'appellation pour utiliser les minuscules et le trait de soulignement pour les identifiants ou cela peut-il causer des problèmes sur l'appareil réel ?

Thx

0 votes

Avec de nouveaux viewbinding Les identifiants des vues sont automatiquement convertis en majuscules.

91voto

Daniel Lew Points 39063

L'appareil ne se plaindra pas si vous utilisez des noms d'identification en majuscules. Pour ma première application, j'ai écrit tous les identifiants en majuscules parce que je pense que cela apparaît mieux dans le code Java, et cela fonctionne très bien.

Cependant, je change peu à peu d'avis sur la casse camel, car on se retrouve avec deux conventions de dénomination différentes - par exemple :

// This must be undescored due to naming constrictions
setContentView(R.layout.my_long_layout_name);

// Now this looks a little out of place
findViewById(R.id.myLongSpecificId);

Moi aussi, je m'interroge sur les normes en vigueur ici. Google n'est pas cohérent dans ses exemples ; parfois il utilise toutes les minuscules, parfois il insère des traits de soulignement, et parfois il utilise des majuscules.

22 votes

Oui, c'est exactement mon problème. Ils vous obligent à utiliser la convention de dénomination soulignée pour les mises en page, alors que vous pouvez utiliser la casse ou le soulignement pour les identifiants faisant référence aux contrôles/widgets dans les définitions de mise en page XML. Google devrait vraiment définir un standard ici (s'ils ne l'ont pas déjà fait, du moins je n'ai rien trouvé). Le choix d'une seule méthode est certainement le meilleur moyen d'être cohérent dans toute l'application, que vous fassiez référence à des mises en page ou à des champs référencés par un identifiant.

0 votes

Juste par curiosité : Avez-vous un lien où Google est incohérent, c'est-à-dire où il utilise la notation en minuscules pour les identifiants ?

8 votes

Pour rendre les choses encore plus confuses, les noms des styles (qui sont comme des identifiants pour les styles) dans les modèles de projet utilisent la casse Pascal, par ex. AppBaseTheme y AppTheme .

14voto

Kiril Aleksandrov Points 224

Si vous regardez android.R.id.* vous remarquerez qu'ils sont tous en majuscules. Donc si les identifiants Android sont écrits en majuscules, je pense que nous devons suivre cette convention :)

1 votes

Ils sont en camel case car ils ont été créés en camelCase. Cela ne crée aucun précédent en matière de style de codage pour l'ensemble de la communauté et n'est pas lié aux conventions de dénomination des fichiers de ressources par rapport à celles des chaînes d'identification, ce qui est le sujet de la question posée par l'auteur de la première affiche.

3 votes

Oui, ils ont été créés dans un étui à chameau. Mais ces identifiants proviennent de l'API Android elle-même, donc si le créateur de l'API a utilisé la casse camel, je pense que c'est une bonne approche pour suivre sa convention.

9 votes

widget_frame champ [ [developer.Android.com/reference/Android/R.id.html#widget_frame]](http://developer.android.com/reference/android/R.id.html#widget_frame]) également dans android.R.id.* Dans ce champ, Google utilise l'underscore et non la majuscule. Votre conclusion sur la convention de la majuscule est donc correcte, mais celle sur la convention de l'ID peut être fausse.

10voto

Je pense qu'il parle d'identifiants dans un fichier xml, par exemple :

Android:id="@+id/home_button" contre Android:id="@+id/HomeButton" (bouton d'accueil)

Je n'ai trouvé aucune convention ou directive à ce sujet, de sorte que les développeurs de mon projet utilisent les deux méthodes de manière indistincte, ce qui est assez pénible :(.

8voto

Rogene Sagmit Points 16

Je pense que c'est bien d'utiliser toutes les lettres minuscules avec des caractères de soulignement.

Regardez ceci (en complément de la réponse de Daniel).

  // Camel Case
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName);
    // Small Caps and Underscores
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name);

D'après ma propre expérience, j'ai tendance à être un peu confus par rapport à la convention de la majuscule dans le xml, car lorsque vous le liez à Java qui utilise également la majuscule (parce que c'est la norme), cela ressemble à un double.

2 votes

C'est très subjectif et cela ne répond pas à la question de savoir pourquoi on ne peut pas nommer les fichiers de ressources de la même manière qu'on peut identifier les chaînes de caractères.

0voto

Brock Woolf Points 16128

Si le compilateur d'Android fait vraiment ce que vous dites en limitant la casse (ce qui semble plutôt étrange), vous devriez vous en tenir aux conventions établies.

Aller à contre-courant ne fera qu'engendrer une confusion inutile. Dans la mesure du possible, veillez à ce que les choses soient cohérentes partout.

1 votes

Vous avez probablement mal compris ce que j'essayais de dire. Le compilateur se plaindra si vous placez les ressources comme un fichier et que vous écrivez cela en casse camel. L'autre cas cependant est lorsque vous spécifiez des ID dans les fichiers de mise en page XML. Là, vous avez la possibilité de placer des noms d'identifiants en majuscules et l'émulateur fonctionne très bien. Maintenant, comme je l'ai mentionné, les échantillons de Google sont tous sous la forme mon_id_nom, mais il y a beaucoup d'autres échantillons autour ayant des noms d'ID en majuscules...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X