Recentemente ho riscontrato una situazione in un progetto Java in cui ho scritto un blocco come questo:
String user = System.getProperty("user.home").toUpperCase();
user = user.substring(user.lastIndexOf(File.separator) + 1);
final String path1 = "C:\first\path";
final String path2 = "C:\second\path";
final String uniquePath = "C:\users\" + user + "\unique\path";
Mi sto solo abituando a contrassegnare le variabili come final
per lo stile, ma non sono sicuro di come gestire questo tipo di esempio. A quanto ho capito, final
è spesso usato non solo per impedire che un valore venga modificato, ma per indicare al lettore che la variabile è immutabile. In questo esempio, qualcuno vede che path1
, path2
e uniquePath
non cambieranno e questo cambia radicalmente il modo in cui pensano a tali variabili.
La mia preoccupazione è che, nell'esempio sopra, i percorsi siano chiaramente final
, e user
chiaramente no. Non è troppo difficile (penso) per capire che user
probabilmente non verrà manipolato, e l'unica ragione per cui non è anche final
è perché non può essere ottenuto in una sola espressione. Tuttavia, se vedessi questo codice, sarebbe davvero difficile per me raggruppare mentalmente user
con i percorsi. Ovviamente il coder ha voluto indicare quali variabili erano final
e non hanno contrassegnato user
.
Sembra quindi che qualcosa del genere renderebbe le cose più chiare:
String temp = System.getProperty("user.home").toUpperCase();
temp = temp.substring(temp.lastIndexOf(File.separator) + 1);
final String user = temp;
final String path1 = "C:\first\path";
final String path2 = "C:\second\path";
final String uniquePath = "C:\users\" + user + "\unique\path";
Ma non sono sicuro che questo valga lo spazio extra e la variabile necessaria.
Esiste un consenso su quale di questi approcci è una pratica migliore? C'è un'opzione migliore che non ho considerato?