Per me, trovare un buon nome per qualcosa torna sempre a pensarlo come un oggetto che deve giustificare la sua esistenza. Chiediti:
- Che cosa fa la classe / metodo / variabile, cioè qual è il suo scopo più ampio e a cosa serve?
- Che cosa specificamente riguardo al suo scopo ha bisogno di comunicare, cioè qual è la parte essenziale che il nome deve avere in esso?
La maggior parte degli sviluppatori concorda sul fatto che la leggibilità è sempre di fondamentale importanza quando si parla di denominazione. Non scrivere semplicemente il codice in modo che tu sappia cosa intendi mentre lo stai scrivendo, scrivilo in modo che qualcuno che guarda il codice per la prima volta ad un certo punto del futuro sappia cosa vuoi dire senza dover pensare troppo. Scriverò il codice solo una volta, ma durante la sua durata molto probabilmente dovrà essere modificato molte volte e letto ancora più volte.
Il codice dovrebbe essere self-documenting , ovvero la tua denominazione dovrebbe rendere evidente ciò che fa qualcosa. Se devi spiegare che cosa fa una riga di codice in un commento e rinominare le cose non migliora abbastanza, dovresti seriamente considerare di refactoring quella linea in un nuovo metodo con un nome descrittivo appropriato, in modo che leggendo il metodo originale, il la nuova chiamata al metodo descrive cosa sta succedendo. Non aver paura di avere nomi lunghi; ovviamente non dovresti scrivere romanzi in classe / metodo / nomi di variabili, ma preferirei che un nome fosse troppo lungo e descrittivo che troppo corto e ho bisogno di capire cosa fa guardando sotto il cofano. Fatta eccezione per alcune ovvie eccezioni come le coordinate x / y e gli acronimi comunemente usati, evitare nomi e abbreviazioni di singoli caratteri. Chiamare qualcosa "bkBtn" invece di "backButton" potrebbe aver avuto uno scopo quando i nomi erano limitati a 8 caratteri ei dinosauri vagavano per la terra, ma in questi giorni con il completamento del codice non c'è davvero alcuna scusa per abbreviare.
Per quanto la tua lingua lo consenta, leggi il tuo codice come una frase inglese. Gli oggetti usano nomi, i metodi usano i verbi. I metodi booleani di solito iniziano con "è", ma ci sono molte altre opzioni che trasmettono il significato ancora meglio, a seconda del caso d'uso, come "può", "dovrebbe" o "fa". Naturalmente, non tutte le lingue possono essere valide come Smalltalk, ma alcuni simboli sono generalmente interpretati come parti della frase. Due convenzioni Smalltalk Personalmente mi piace prendere il più possibile in altri linguaggi, prefisso il nome dei parametri del ciclo con "each" e prefisso i parametri del metodo con l'articolo "a" (o "an", o "some" per le collezioni) . Questo potrebbe non essere uno standard comune in Java, e chiunque può ignorare questo bit, ma trovo che questo migliori notevolmente la leggibilità del codice. Ad esempio (esempio in Java):
public boolean shouldConsiderAbbreviating(List<String> someNames) {
for (String eachName : someNames) {
if (isTooLong(eachName)) {
return true;
}
}
return false;
}
Questo dovrebbe essere leggibile per le persone con un minimo di conoscenza di Java come qualcosa del genere:
Per determinare se dovresti prendere in considerazione l'abbreviazione di un elenco di alcuni nomi (che sono stringhe), scorrere su alcuni nomi e, per ciascun nome, determinare se è troppo lungo; in tal caso, restituisci true
; se nessuno è troppo lungo, restituisci false
.
Contrastare il codice precedente con solo la denominazione dell'argomento strings
e la variabile di ciclo string
, specialmente in un metodo più complesso. Dovresti guardare da vicino per vedere la differenza, invece dell'uso è ovvio da un'occhiata al nome.