2010-01-25 9 views
10

Qui http://source.android.com/source/code-style.html#follow-field-naming-conventions si precisa che:Le regole di denominazione dei campi private di Android sono ok?

nomi dei campi

  • , i nomi non pubblici dei campi non statici iniziano con m.
  • nomi dei campi statici iniziano con s.
  • Altri campi iniziano con una lettera minuscola.
  • campi finali statici pubblici (costanti) sono ALL_CAPS_WITH_UNDERSCORES.

Essa afferma inoltre che:

Le regole che seguono non sono linee guida o raccomandazioni, ma regole severe. Non è possibile ignorare le regole che elenchiamo qui di seguito tranne quelle approvate su una base di necessità di utilizzo.

Non mi piace la convenzione "m" prima dei campi privati ​​o del pacchetto in una classe. Trovo davvero questo non ispirato ... Voglio dire, se proviamo ad applicare buoni progetti, l'accoppiamento basso delle classi implica avere pochi campi pubblici. in realtà, nei miei programmi di solito non ho campi pubblici, anche quando ne ho bisogno uso getter e setter ...

Quindi, perché dovrei essere forzato ad avere quasi tutti i miei campi nel programma con una "m" di fronte a loro? non sarebbe più facile avere i pochi campi pubblici, se ce ne sono, con qualche "g" di fronte o qualcosa del genere? o semplicemente usare setter e getter come suggeriscono i fagioli? questo rende il mio codice più difficile da leggere ....

Inoltre, seguendo queste linee guida, le variabili temporali locali utilizzate nei metodi non hanno restrizioni in modo che possano essere facilmente scambiate per campi globali pubblici (anche senza restrizioni). anche questo trovo che sia sbagliato, poiché è una probabile fonte di errori ... Capisco di avere un modo di differenziare dai campi, ma i campi membri privati ​​/ protetti sono i più usati in un'applicazione, non dovrebbero essere meno "leggibile".

Cosa ne pensi? Devo seguire le linee guida?

+0

Uno dei motivi per cui prefissi come questi sono spesso obbligatori è quello di impedire di nascondere i campi membri. Ad esempio, si ha spesso un parametro per un metodo costruttore o setter che ha lo stesso nome del campo membro se non si hanno prefissi. In questi casi devi quindi accedere al campo membro usando "questo". di fronte ad esso ogni volta che è nascosto. I programmatori ogni tanto dimenticano il "questo", che porta a bug. Un prefisso sui campi pubblici non è così utile perché non è necessario un setter su un campo pubblico. –

+0

in realtà preferisco il prefisso m_ sui campi privati ​​perché rende più semplice leggere i metodi della classe. Queste convenzioni sono usate perché il codice è letto più del suo scritto ... Penso che questo sia nel codice Completo somwhere? ... –

+0

sono d'accordo con te .. non mi piace la convenzione "m" e non lo uso volentieri – hendrix

risposta

10

Queste linee guida di codifica sono per il progetto Open Source Android, che è la piattaforma principale di Android. Devi seguire queste linee guida se vuoi che il tuo codice venga accettato nella piattaforma principale. Puoi fare ciò che vuoi nelle tue applicazioni.
Per quanto riguarda le linee guida, ritengo che siano molto ragionevoli e simili a molti standard utilizzati nelle applicazioni commerciali. In genere si desidera utilizzare getter e setter per l'accesso al campo pubblico e non si desidera avere variabili pubbliche globali. Solo le costanti pubbliche globali sono ok.
Quindi la risposta breve è seguirli per il progetto Open Source, decidere di seguirli nell'app.

1

Per quanto riguarda i getter \ setter, in realtà è consigliabile non utilizzarli in Android.

Ho trovato questo sul "Progettare per prestazioni" page (sezione: Evitare interno Getters/Setter): http://developer.android.com/guide/practices/design/performance.html

Linea di fondo, deducono che le ricerche sul campo esempio sono più efficienti di chiamate di metodo virtuali (a causa di ottimizzazioni nel JIT).

Penso che continuerò a utilizzare getter \ setter nel mio codice, ma questo potrebbe essere un modo semplice per migliorare le prestazioni (in particolare per le app che fanno molta manipolazione dei dati).

+3

Tu utilizzare setter/getter per accedere a un campo privato di un oggetto di un'altra classe. Tuttavia, si dovrebbe limitare l'uso di questi metodi internamente. Internamente, perché dovresti usare 'name = getName()', l'accesso diretto alla variabile è più efficiente (name = mName) – Marqs

Problemi correlati