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.

The article if( boolean.isEasyToUnderstand() ) has been posted by Luca Ferrari on January 21, 2011