Namenskonvention für Android-IDs: Kleinbuchstaben mit Unterstrich vs. Kamelbuchstaben


89

Ich programmiere gerade eine Anwendung für Android. Was ich jetzt herausgefunden habe, ist, dass Sie keine Ressourcenobjekte, beispielsweise ein Bild, in den Zeichenordner legen und es wie "myTestImage.jpg" benennen können. Dies führt zu einem Compilerfehler, da die Syntax für Kamelfälle nicht zulässig ist. Sie müssten sie daher in "my_test_image.jpg" umbenennen.

Aber was ist mit IDs, die Sie in der XML-Datei definieren? Angenommen, Sie haben die folgende Definition

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

Dies ist eine gültige Definition, die auf meinem Android-Emulator kompiliert und einwandfrei funktioniert, obwohl ich - wie Sie sehen - die ID in der Kamel-Fall-Syntax spezifiziere.

Jetzt verwenden die Android-Beispiele immer Kleinbuchstaben und Unterstriche. Ist dies nur eine Namenskonvention zur Verwendung von Kleinbuchstaben mit Unterstrich für die IDs oder kann dies zu Problemen auf dem realen Gerät führen?

Vielen Dank

Antworten:


87

Das Gerät wird sich nicht beschweren, wenn Sie Kamel-Fall-ID-Namen verwenden. Für meine erste Anwendung habe ich alle IDs in Camel-Case geschrieben, weil ich denke, dass es im Java-Code auf diese Weise besser erscheint und gut funktioniert.

Ich ändere jedoch langsam meine Meinung über Kamelfälle, weil Sie am Ende zwei verschiedene Namenskonventionen haben - zum Beispiel:

// 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);

Auch ich wundere mich über die Standards hier. Google ist in ihren Beispielen inkonsistent. manchmal verwenden sie alle Kleinbuchstaben, manchmal fügen sie Unterstriche ein und manchmal verwenden sie Kamelbuchstaben.


18
Ja, das ist genau mein Problem. Sie zwingen Sie, die unterstrichene Namenskonvention für Layouts zu verwenden, während Sie für die IDs, die auf Steuerelemente / Widgets in den XML-Layoutdefinitionen verweisen, entweder Camel-Case oder unterstrichen verwenden können. Google sollte hier wirklich einen Standard definieren (falls noch nicht geschehen, habe ich zumindest nichts gefunden). Wenn Sie sich also für Layouts oder ID-referenzierte Felder entscheiden, ist es sicher das Beste, in der gesamten Anwendung konsistent zu sein.
Juri

Nur aus Neugier: Haben Sie einen Link, bei dem Google inkonsistent ist, dh wo die Camel-Case-Notation für IDs verwendet wurde?
Juri

6
Um die Dinge weiter zu verwirren, verwenden die Stilnamen (die wie IDs für Stile sind) in den Projektvorlagen PascalCase, z . B. AppBaseThemeund AppTheme.
Edward Brey

4
Die Unterstrichmethode wird in den Teams, in denen ich tätig war, im Allgemeinen als viel weniger lesbar angesehen. Die etwas seltsame Einschränkung der Namen der Ressourcendateien, die im Fall von Kamel nicht zulässig sind, sollte Ihr Denken für den Rest der Java-Schnittstellen nicht verschmutzen - camelCase ist fest verwurzelt und ich glaube nicht, dass jemand Ihnen dafür danken würde, dass Sie bei der Benennung von Konventionen einen neuen "_" -Stil erzwungen haben.
RichieHH

3
@RichardRiley Ich finde das interessant, da bei Unterstrichen die Wortgrenzen richtig definiert sind, während sie bei Kamelhüllen zusammengedrückt werden, so dass es mir leichter fällt, durch Unterstriche getrennte Namen zu analysieren als bei Kamelhüllen.
JAB

13

Wenn Sie sich android.R.id.*Felder ansehen , werden Sie feststellen, dass sich alle in einem Kamelkoffer befinden. Also, wenn die Android-IDs in Kamel-Fall geschrieben sind, müssen wir diese Konvention befolgen :)


Sie befinden sich dort im Kamelkoffer, weil sie in camelCase erstellt wurden. Dies stellt keinen Präzedenzfall für den Codierungsstil für die gesamte Community dar und ist nicht mit den Namenskonventionen von Ressourcendateien im Vergleich zu denen von ID-Zeichenfolgen verknüpft, nach denen das Originalposter fragt.
RichieHH

3
Ja, sie wurden im Kamelkoffer erstellt. Aber diese IDs stammen von der Android-API selbst. Wenn der Ersteller der API einen Kamelfall verwendet hat, ist es meiner Meinung nach ein guter Ansatz, seiner Konvention zu folgen.
Kiril Aleksandrov

8
dort widget_frameFeld [ developer.android.com/reference/android/R.id.html#widget_frame] auch in android.R.id.*Feldern. in diesem Feld Google verwenden Unterstrich nicht Kamel-Fall Also Ihre Schlussfolgerung über Kamel-Fall-Konvention ist richtig, wählen Sie für ID-Konvention kann falsch sein
ahmed hamdy

4

Ich finde es gut, wenn wir alle Kleinbuchstaben mit Unterstrichen verwenden.

Schau dir das an (zusätzlich zu dem, was Daniel geantwortet hatte)

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

Nach meiner eigenen Erfahrung neige ich dazu, ein wenig verwirrt zu sein von der Kamelfallkonvention in XML, denn wenn Sie sie mit Java verknüpfen, das auch Kamelfall verwendet (weil es der Standard ist), sieht es aus wie ein Doppelgänger.


Dies ist sehr subjektiv und beantwortet nicht die Frage, warum Sie Ressourcendateien nicht ähnlich benennen können, wie Sie Zeichenfolgen identifizieren können.
RichieHH

3

Ich denke, wenn wir die Unterstrichkonvention für ID in XML-Dateien und die Kamelfallkonvention für Klassenfelder verwenden, wird dies jedem Entwickler eine bessere Sichtbarkeit geben, um zwischen XML-IDs und Klassenfeldern zu unterscheiden.



3
android:id="@+id/frag_account_button"
frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));

android:id="@+id/fragAccountButton"
fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));

Erstens gibt es keinen bestimmten Standard, um zu definieren, welcher besser ist, aber ich habe meine eigene Vorstellung davon. Meine Idee ist vernünftig, XML-ID und Java-Variable mit der Kamel-Fall-Konvention im exakt gleichen Namen zu halten.

  1. Es ist einfach, die Variable zu erreichen, indem Sie sowohl auf der XML- als auch auf der Java-Seite nach dem Projekt suchen.

  2. Definition der butterKnife-Bibliothek

    @BindView (R.id.infoTextView) TextViewFont infoTextView;

Es ist richtiger, auf diese Weise zu bleiben.


3
Kotlins Ansichtsbindung gibt dasselbe zurück wie butterKnife, daher lasse ich snake_case insgesamt fallen.
Rik Martins

1

XML-Dateinamen (die im Zeichenordner verwendet werden) müssen in Kleinbuchstaben durch den Unterstrich _ getrennt sein, da großgeschriebene Dateinamen in XML nicht unterstützt werden.


1
Hier geht es nicht um Dateinamen, und außerdem ziehen es einige Leute vor, den ersten Buchstaben beim Kamelgehäuse nicht groß zu schreiben.
Jesper

Es ist ein seltsames, nicht übereinstimmendes Problem, IMO. Sie können nicht zwischen Groß- und Kleinschreibung unterscheiden, nein, aber warum nicht einfach Ressourcendateien mit demselben Namen als Stammkomponente im selben Verzeichnis verbieten?
RichieHH

(Übrigens geht es um Dateinamen gegen Ressourcen-IDs: Überprüfen Sie das OP erneut)
RichieHH

0

Wenn der Android-Compiler wirklich das tut, was Sie sagen, um den Fall von Kamelen einzuschränken (was ziemlich seltsam erscheint), sollten Sie sich an die festgelegten Konventionen halten.

Gegen den Strich zu gehen, wird nur unnötige Verwirrung stiften. Halten Sie die Dinge an allen Orten konsistent, wo dies möglich ist.


Sie haben wahrscheinlich falsch verstanden, was ich sagen wollte. Der Compiler wird sich beschweren, wenn Sie Ressourcen wie eine Datei einfügen und diese in Kamel-Fall schreiben. Der andere Fall ist jedoch, wenn Sie IDs in den XML-Layoutdateien angeben. Dort haben Sie die Möglichkeit, Kamelfall-ID-Namen zu platzieren, und der Emulator funktioniert einwandfrei. Wie ich bereits erwähnt habe, haben die Google-Beispiele alle die Form my_id_name, aber es gibt viele andere Beispiele mit Kamelfall-ID-Namen ...
Juri
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.