Oggi riflettevo su come migliorare la leggibilita' del codice Java/C/C# e sono giunto alla conclusione che un buon metodo per aumentare la leggibilita' del codice e' quello di dare un nome esplicito a tutti i parametri dei metodi (ove possibile). E questo significa che, ad esempio, i valori booleani devono essere rimossi dalle chiamate di metodo e sostituiti con enumerazioni o costanti "parlanti".
Per meglio comprendere si consideri un esempio di codice come segue:
File myFile = new File("/tmp/test.txt");
byte[] mycontent = "TEST".getBytes();
MyFileManager.writeContent( myFile, mycontent, true );
Ora cosa significa quel "true" come ultimo parametro del metodo? Ad esempio potrebbe essere un indicatore che dice di lavorare in sostituzione invece che in append sul file, e quindi potrebbe essere migliorato il codice come segue:
File myFile = new File("/tmp/test.txt");
byte[] mycontent = "TEST".getBytes();
MyFileManager.writeContent( myFile, mycontent, MyFileManager.OVERWRITE );
e se si volesse lavorare in append si potrebbe scrivere:
File myFile = new File("/tmp/test.txt");
byte[] mycontent = "TEST".getBytes();
MyFileManager.writeContent( myFile, mycontent, MyFileManager.APPEND );
Inutile dire che a prima lettura queste scritture sono molto piu' chiare rispetto a quella che utilizza un valore booleano.
Colgo l'occasione per fare una riflessione sulle enumerazioni, che ben si prestano allo scopo appena descritto: uno degli svantaggi delle enum e' che per avere dei valori "stampabili" o da usare come chiavi per hash e indici occorre sovrascrivere il toString() per ogni elemento della enumerazione. In altre parole i singoli valori di una enum sono visti come una inner class, e come tale possono avere un valore stringa che per default e' il valore della enum stessa, ma che puo' essere sovrascritto. Ad esempio:
public enum EMPLOYEE_STATUS{
HIRED {
public String toString(){
return "assunto";
}
},
FIRED {
public String toString(){
return "licenziato";
}
},
}
Questo make up si rende necessario per limitare i valori che vengono usati nel software e rendere il tutto piu' consistente. Ma in questo caso, l'utilizzo di stringhe "secche" risulta piu' semplice che una enumerazione:
public class EMPLOYEE_STATUS{
public static final String HIRED = "assunto";
public static final String FIRED = "licenziato";
}
Inutile dire che lo svantaggio piu' evidente di questo sistema e' che e' bene vincolare un parametro ad una serie limitata di possibilita' e non ad un generico "int" o "String", che potrebbe assumere qualunque valore.
Per meglio comprendere si consideri un esempio di codice come segue:
File myFile = new File("/tmp/test.txt");
byte[] mycontent = "TEST".getBytes();
MyFileManager.writeContent( myFile, mycontent, true );
Ora cosa significa quel "true" come ultimo parametro del metodo? Ad esempio potrebbe essere un indicatore che dice di lavorare in sostituzione invece che in append sul file, e quindi potrebbe essere migliorato il codice come segue:
File myFile = new File("/tmp/test.txt");
byte[] mycontent = "TEST".getBytes();
MyFileManager.writeContent( myFile, mycontent, MyFileManager.OVERWRITE );
e se si volesse lavorare in append si potrebbe scrivere:
File myFile = new File("/tmp/test.txt");
byte[] mycontent = "TEST".getBytes();
MyFileManager.writeContent( myFile, mycontent, MyFileManager.APPEND );
Inutile dire che a prima lettura queste scritture sono molto piu' chiare rispetto a quella che utilizza un valore booleano.
Colgo l'occasione per fare una riflessione sulle enumerazioni, che ben si prestano allo scopo appena descritto: uno degli svantaggi delle enum e' che per avere dei valori "stampabili" o da usare come chiavi per hash e indici occorre sovrascrivere il toString() per ogni elemento della enumerazione. In altre parole i singoli valori di una enum sono visti come una inner class, e come tale possono avere un valore stringa che per default e' il valore della enum stessa, ma che puo' essere sovrascritto. Ad esempio:
public enum EMPLOYEE_STATUS{
HIRED {
public String toString(){
return "assunto";
}
},
FIRED {
public String toString(){
return "licenziato";
}
},
}
Questo make up si rende necessario per limitare i valori che vengono usati nel software e rendere il tutto piu' consistente. Ma in questo caso, l'utilizzo di stringhe "secche" risulta piu' semplice che una enumerazione:
public class EMPLOYEE_STATUS{
public static final String HIRED = "assunto";
public static final String FIRED = "licenziato";
}
Inutile dire che lo svantaggio piu' evidente di questo sistema e' che e' bene vincolare un parametro ad una serie limitata di possibilita' e non ad un generico "int" o "String", che potrebbe assumere qualunque valore.
Nessun commento:
Posta un commento