Newsgroup: it.comp.lang.visual-basic
Titolo: Le variabili pubbliche sono più veloci delle proprietà?

In un sito che parla di ActionScript ho trovato quanto segue:
--------------------------------- 
In termini di controllo del codice l'utilizzo di get e set è notevolmente
migliore rispetto all'utilizzo di una variabile pubblica, tuttavia in
termini di prestazioni una variabile pubblica è notevolmente più veloce di
una funzione (non dimentichiamo che get e set sono appunto delle funzioni,
quindi richiedono l'allocazione di più memoria).
Quindi, quando usare get e set al posto di una variabile pubblica? La
risposta è presto detta anche se piuttosto banale: quando se ne richiede 
l'uso.
Se è possibile che il codice generi degli errori dovuti all'assegnazione di
valori ambigui ad una variabile;
se è necessario che all'assegnazione del valore venga eseguita qualche altra
funzione;
se è necessario eseguire il dispatch di un evento;
potrebbe rendersi preferibile l'uso dei getter\setter piuttosto che
utilizzare variabili pubbliche.
--------------------------------- 
Credete che quanto detto sia valido anche in 
VB.NET
 2008?

 Credete che quanto detto sia valido anche in 
VB.NET
 2008?
No, come del resto sono fermamente convinto che non sia valido per 
qualunque altro linguaggio orientato agli oggetti.
Una variabile pubblica non ti consente nessun tipo di controllo su ciò 
che le viene assegnato (e fa perdere molto in flessibilità), e questo 
fatto da solo è IMHO più che sufficiente a rendere totalmente ridicolo 
il discorso del guadagno in termini di prestazioni.
E' vero che, prima di assegnare un valore ad una variabile pubblica 
(supponiamo sia di tipo uint), puoi scrivere del codice per controllare 
che sia maggiore di 0. Ma quante volte dovrai ripetere quel codice di 
controllo? E cosa succederà se ad un certo punto cambierai il tipo della 
variabile a int?
Scrivere codice che viola le "best practices" della programmazione ad 
oggetti non è mai una buona idea, eccetto in pochi casi.
Nella fattispecie, scrivere codice pensando da subito alle prestazioni 
PRIMA ancora che esso abbia dimostrato di essere poco performante porta 
quasi inevitabilmente a commettere qualche sciocchezza.
E comunque, anche in presenza di problemi di prestazioni, dubito 
fortemente che sostituire un get/set in favore di una variabile pubblica 
farà guadagnare qualcosa.
-- 
S.

Per quanto mi riguarda ogni dato va incapsulato e gestito opportunamente per 
evitare qualsiasi tipo di incongruenza all'interno del modello a oggetti. 
Questo va fatto anche se il dato, con i metodi get e set, viene 
semplicemente restituito o assegnato. Non mi sembra una logica corretta 
quella di dare priorità alle "prestazioni" rendendo pubblica la variabile. 
Di sicuro se ad una applicazione è necessario rendere pubbliche le variabili 
per dargli respiro in termini di velocità, direi che c'è qualcosina da 
rivedere nell'architettura della stessa.
Attento che in VB6 le variabili public nelle classi in realtà vengono 
trattate con delle property nascoste, per cui di fatto non credo cambi molto 
in velocità.
Per rendertene conto basta che fai un banalissimo esempio.
Crei una classe con un unico dato public, ad esempio una stringa.
Crei una funzione, su un modulo o su un form di test, che accetta byref una 
stringa e al suo interno la modifica.
Poi istanzi la classe e passi alla funzione il dato pubblico, ti accorgerari 
che in uscita dalla funzione, nella classe istanziate non è cambiato nulla 
ovvero il byref è stato totalmente bypassato come se fosse un byval.