Sì, ovviamente assegnare direttamente una variabile è più veloce che chiamare un metodo. Tuttavia, ci sono buone ragioni per cui l'utilizzo di un metodo è migliore.
-
Il principio di accesso uniforme dice che tutti i dati di un oggetto (o qui: libreria) dovrebbe essere accessibile tramite la stessa interfaccia. Questo sarebbe violato se alcune proprietà potessero essere impostate direttamente, e altre potrebbero essere impostate solo tramite metodi. Almeno alcune proprietà useranno i metodi, a causa di ...
-
Validation . Può darsi che alcune variabili di configurazione abbiano il tipo int
, ma forse accetta solo valori >= 0
. Con una variabile public
, non c'è modo di verificarlo. Con un metodo, possiamo eseguire una convalida arbitraria.
Ovviamente, questo non si applica ai campi final
. Rendere pubbliche le costanti non è un problema, tranne forse per gli altri due motivi qui. Dipende da come vengono utilizzati.
-
incapsulamento è importante. Se la nostra API pubblica è composta da variabili, non possiamo mai rimuoverle senza compromettere la compatibilità con le versioni precedenti. Ciò influisce sul funzionamento interno della nostra biblioteca. Quando utilizziamo i metodi per impostare / ottenere valori, possiamo rielaborare i componenti interni della nostra libreria senza dover modificare l'API pubblica. Ad esempio, eseguire qualche hook quando una proprietà è stata impostata non è un problema con i metodi.
Insieme, questi sono tre buoni motivi per usare i metodi. È molto più flessibile e molto più pulito ed estensibile dell'alternativa.
C'è un altro problema con le variabili globali, o più precisamente con globale : possiamo avere una sola "istanza" della tua libreria alla volta. Questo può rendere molto difficili i test o altri usi avanzati. Invece, offri la tua API tramite oggetti normali con la consapevolezza che normalmente si userebbe solo un'istanza. Usando static
qualsiasi cosa è non orientata agli oggetti , è solo una programmazione procedurale sottilmente velata.
Riepilogo: public variable
è pessimo, public static method()
non è neanche eccezionale. private variable
è buono, come public setVariable(…)
.