Per me, trovare un buon nome per qualcosa torna sempre a pensarlo come un oggetto che deve giustificare la sua esistenza. Chiedilo a te stesso:
- Cosa fa la classe / metodo / variabile, ovvero qual è il suo scopo più ampio e a cosa serve?
- Che cosa deve sapere in particolare riguardo al suo scopo, cioè qual è la parte essenziale che il nome deve avere in esso?
La maggior parte degli sviluppatori concorderebbe sul fatto che la leggibilità è sempre di fondamentale importanza quando si tratta di nominare. Non scrivere semplicemente codice in modo da sapere cosa intendi mentre lo scrivi, scrivilo in modo che qualcuno che guardi il codice per la prima volta ad un certo punto in futuro sappia cosa intendi senza dover pensare troppo. Scriverai il codice una sola volta, ma nel corso della sua vita dovrà probabilmente essere modificato più volte e letto anche più volte.
Il codice dovrebbe essere auto-documentato, cioè la tua denominazione dovrebbe rendere ovvio cosa fa qualcosa. Se hai bisogno di spiegare cosa fa una riga di codice in un commento, e rinominare le cose non la migliora abbastanza, dovresti seriamente considerare di rifattorizzare quella linea in un nuovo metodo con un nome adeguatamente descrittivo, in modo che leggendo il metodo originale, il la nuova chiamata del metodo descrive cosa sta succedendo. Non aver paura di avere nomi lunghi; ovviamente non dovresti scrivere romanzi in nomi di classe / metodo / variabile, ma preferirei che un nome fosse troppo lungo e descrittivo piuttosto che troppo breve e ho bisogno di capire cosa fa guardando sotto il cofano. Tranne alcune ovvie eccezioni come le coordinate x / y e gli acronimi comunemente usati, evita nomi e abbreviazioni a carattere singolo. Chiamare qualcosa "bkBtn" invece di "backButton"
Per quanto la tua lingua lo permetta, fai leggere il tuo codice come una frase inglese. Gli oggetti usano nomi, i metodi usano i verbi. I metodi booleani in genere iniziano con "is", ma ci sono molte altre opzioni che trasmettono il significato ancora meglio, a seconda del caso d'uso, come "can", "should" o "does". Ovviamente, non tutte le lingue possono essere buone come Smalltalk in questo, ma alcuni simboli sono generalmente considerati parti della frase. Due convenzioni di Smalltalk che personalmente mi piace prendere il più possibile in altre lingue sono il prefisso del nome dei parametri del ciclo con "ciascuno" e il prefisso dei parametri del metodo con l'articolo "a" (o "un", o "alcuni" per le raccolte) . Questo potrebbe non essere uno standard comune in Java e chiunque può ignorare questo bit, ma trovo che questo migliora 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 da persone con un po 'di conoscenza di Java come qualcosa del genere:
Per determinare se è necessario abbreviare un elenco di alcuni nomi (che sono stringhe), scorrere su alcuni nomi e, per ciascun nome, determinare se è troppo lungo; in tal caso, tornare true
; se nessuno è troppo lungo, ritorna false
.
Contrasta il codice sopra con la semplice denominazione dell'argomento strings
e della variabile loop string
, specialmente in un metodo più complesso. Dovresti guardare da vicino per vedere la differenza invece che l'uso sia evidente da uno sguardo al nome.