Convenzione di denominazione degli ID Android: lettere minuscole con trattino basso rispetto a lettere maiuscole


90

Attualmente sto programmando un'applicazione per Android. Quello che ho scoperto è che non è possibile posizionare oggetti risorsa, ad esempio un'immagine nella cartella disegnabile e denominarla come "myTestImage.jpg". Questo ti darà un errore del compilatore poiché la sintassi del case camel non è consentita, quindi dovresti rinominarla come "my_test_image.jpg".

Ma per quanto riguarda gli ID che definisci nel file XML. Supponi di avere la seguente definizione

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

Questa è una definizione valida, si compila e funziona bene sul mio emulatore Android anche se - come vedi - sto specificando l'id nella sintassi del caso del cammello.

Ora, gli esempi Android usano sempre lettere minuscole e trattini bassi. È solo una convenzione di denominazione per utilizzare lettere minuscole con trattino basso per gli ID o potrebbe causare problemi sul dispositivo reale?

Grazie

Risposte:


87

Il dispositivo non si lamenterà se si utilizzano nomi di id camel-case. Per la mia prima applicazione ho scritto tutti gli ID in camel-case perché penso che appaia meglio nel codice Java in questo modo, e funziona perfettamente.

Tuttavia, sto lentamente cambiando idea sul caso del cammello, perché ti ritroverai con due diverse convenzioni di denominazione, ad esempio:

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

Anch'io mi chiedo quali siano gli standard qui. Google è incoerente nei loro esempi; a volte usano tutte lettere minuscole, a volte inseriscono trattini bassi, a volte usano camel-case.


19
Sì, questo è esattamente il mio problema. Ti costringono a usare la convenzione di denominazione sottolineata per i layout mentre puoi usare camel-case o underscored per gli ID che fanno riferimento a controlli / widget all'interno delle definizioni di layout XML. Google dovrebbe davvero definire alcuni standard qui (se non l'hanno già fatto, almeno non ho trovato nulla). Quindi scegliere un modo è sicuramente il migliore per essere coerenti in tutta l'applicazione, indipendentemente dal fatto che si faccia riferimento a layout o campi referenziati con ID.
Juri

Solo per curiosità: hai un link in cui Google non è coerente, ovvero dove hanno usato la notazione camel-case per gli ID?
Juri

6
Per confondere ulteriormente le cose, i nomi degli stili (che sono come gli ID degli stili) nei modelli di progetto usano PascalCase, ad esempio AppBaseThemee AppTheme.
Edward Brey

4
Il metodo di sottolineatura è generalmente considerato molto meno leggibile nei team in cui sono stato coinvolto. La limitazione un po 'strana dei nomi dei file di risorse che non possono essere inseriti in camel non dovrebbe inquinare il tuo pensiero per il resto delle interfacce Java - camelCase è saldamente radicato e non penso che nessuno ti ringrazierebbe per aver imposto un nuovo stile "_" nelle convenzioni di denominazione.
RichieHH

3
@RichardRiley lo trovo interessante, poiché con i caratteri di sottolineatura i confini delle parole sono definiti correttamente mentre con il caso del cammello sono schiacciati insieme, quindi ho un tempo più facile analizzare i nomi separati da caratteri di sottolineatura rispetto a quelli con custodia a cammello.
JAB

13

Se dai un'occhiata ai android.R.id.*campi, noterai che sono tutti in custodia di cammello. Quindi, se gli ID Android sono scritti in camel-case, immagino che dobbiamo seguire questa convenzione :)


Sono in custodia di cammello lì perché sono stati creati in camelCase. Ciò non crea alcun precedente di stile di codifica per la comunità in generale e non è collegato alle convenzioni di denominazione dei file di risorse rispetto a quelle delle stringhe ID, che è ciò di cui si chiede il poster originale.
RichieHH

3
Sì, sono stati creati in custodia di cammello. Ma questi ID provengono dall'API Android stessa, quindi se il creatore dell'API ha utilizzato la custodia del cammello, immagino che sia un buon approccio seguire la sua convenzione.
Kiril Aleksandrov

8
c'è il widget_framecampo [ developer.android.com/reference/android/R.id.html#widget_frame] anche nei android.R.id.*campi. in questo campo Google usa il carattere di sottolineatura non il caso del cammello Quindi la tua conclusione sulla convenzione del caso del cammello è giusta, scegli per la convenzione sull'ID potrebbe essere falsa
ahmed hamdy

4

Penso che sia un bene se usiamo tutte le lettere minuscole con trattini bassi.

Guarda questo (in aggiunta a ciò che Daniel aveva risposto)

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

nella mia esperienza tendo a confondere un po 'la convenzione del caso del cammello in xml perché quando lo colleghi a Java che usa anche il caso del cammello (perché è lo standard) sembra un doppleganger.


Questo è molto soggettivo e non risponde alla domanda sul motivo per cui non puoi nominare in modo simile i file di risorse come puoi identificare le stringhe.
RichieHH

3

Penso che se usiamo la convenzione di sottolineatura per id nei file xml e la convenzione di camel case per i campi di classe, allora darà una migliore visibilità a ogni sviluppatore per distinguere tra ID xml e campi di classe.



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

Prima di tutto, non esiste uno standard certo per definire quale sia più corretto, ma ho una mia idea al riguardo. La mia idea è ragionevole mantenere l'ID XML e la variabile java con lo stesso identico nome con la convenzione camel-case.

  1. È facile raggiungere la variabile cercando il progetto sia XML che java.

  2. definizione della libreria butterKnife

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

È più corretto restare in questo modo.


3
Il binding della vista di Kotlin restituisce lo stesso di butterKnife, quindi elimino del tutto snake_case.
Rik Martins

1

I nomi dei file xml (che è ciò che viene utilizzato nella cartella drawable) devono essere tutti minuscoli separati dal carattere di sottolineatura _ poiché i nomi di file in maiuscolo non sono supportati in xml.


1
Non si tratta di nomi di file e, inoltre, alcune persone preferiscono non utilizzare maiuscole la prima lettera quando si utilizza il cammello.
Jesper

È una strana questione incoerente IMO. Non puoi distinguere tra maiuscole e minuscole, no, ma perché non vietare semplicemente i file di risorse con lo stesso nome del componente radice nella stessa directory.
RichieHH

(A proposito, si tratta di nomi di file e ID risorsa: ricontrolla l'OP)
RichieHH

0

Se il compilatore di Android sta davvero facendo quello che dici limitando il caso del cammello (il che sembra piuttosto strano), dovresti attenersi alle convenzioni stabilite.

Andare controcorrente causerà solo una confusione inutile. Mantieni le cose coerenti in tutti i posti dove possibile.


Probabilmente hai frainteso quello che stavo cercando di dire. Il compilatore si lamenterà se metti le risorse come un file e lo scrivi in ​​caso di cammello. L'altro caso, tuttavia, è quando si specificano gli ID nei file di layout XML. Lì hai la possibilità di inserire nomi di id camel-case e l'emulatore funziona perfettamente. Come ho già detto, i campioni di Google sono tutti nella forma my_id_name, ma ci sono molti altri campioni in giro con nomi di id camel-case ...
Juri
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.