Il testo citato è:
"Affidarsi a tali valori predefiniti, tuttavia, è generalmente considerato un cattivo stile di programmazione."
Cinicamente: "si ritiene generalmente che" sia spesso un modo per dire che l'autore non ha cercato di trovare una fonte autorevole per la dichiarazione presentata.
In questo caso l'affermazione è chiaramente discutibile. Prova: 5 su 5 Java Style Guides campionati NON dicono nulla sull'opportunità o meno di fare affidamento sui valori predefiniti:
(Nota, la mia metodologia per il campionamento è stata quella di esaminare i primi 5 risultati di ricerca distinti di Google per "guida allo stile java". Quindi ho cercato ogni documento come "predefinito". Questa non è un'analisi approfondita, ma serve a chiarire il mio punto. )
OK. Quindi aiuta davvero la leggibilità del codice Java?
Questo è discutibile.
Da un lato, un programmatore Java alle prime armi che non ha imparato l'inizializzazione predefinita può essere sconcertato da dove provengono gli zeri o i null. Ma se si preoccupano di cercare un'inizializzazione esplicita e scoprono che non ce n'è una, ciò dovrebbe essere sufficiente per far loro leggere un tutorial o un libro per scoprire l'inizializzazione predefinita. (Spereresti!)
D'altra parte, normalmente non ci aspettiamo che i programmatori Java alle prime armi mantengano basi di codice di produzione. Per un programmatore Java esperto un'inizializzazione ridondante non migliora la leggibilità. È (al massimo) rumore.
A mio avviso, l'unica cosa che si ottiene con un'inizializzazione ridondante di un campo è segnalare a un futuro lettore del codice che hai pensato al valore iniziale. (Come espresso da @GhostCat, l'inizializzazione predefinita non comunica l'intento.)
Ma al contrario, se fossi quel lettore, non mi fiderei necessariamente del pensiero dell'autore del codice. Quindi anche il valore di questo "segnale" è discutibile.
E l'affidabilità?
In Java non fa differenza. JLS specifica che l'inizializzazione predefinita si verifica per i campi. E viceversa, per le variabili locali è un errore di compilazione tentare di utilizzare una variabile che non è stata definitivamente inizializzata.
In breve, il comportamento di runtime di una variabile non inizializzata esplicitamente è del tutto prevedibile.
Al contrario, in linguaggi come C o C ++ in cui le variabili potrebbero non essere inizializzate, il comportamento non è specificato e può causare arresti anomali e differenze di comportamento su piattaforme diverse. Il caso di inizializzare sempre esplicitamente le variabili è molto più forte qui.
Che dire delle prestazioni?
Non dovrebbe fare alcuna differenza. Il compilatore JIT dovrebbe essere in grado di trattare un'inizializzazione ridondante e l'inizializzazione predefinita come uguali.
private int count = 0;
è il codice che non fa nulla e il codice che non fa nulla è disordinato. È come importare classi da java.lang o dichiarare una classe conextends Object
.